0

В цыкле постоянно меняется переменная которая используется в функции. Перед каждым вызовом функции эта переменная меняется. Дело в том что количество вызовов функции столько сколько переменная менялась . А вот в функции переменная которая менялась 7 раз используется последнее 7 значение этой переменной. Буд то функция запускается только после того как пройдет основной цыкл и потом функция по количеству ее вызовов в этом цыкле начинает выполнение но с уже только последней 7 переменной. Как запускать функцию только после одной смены значения переменной?

(function($){
  function ajaxStart(){
  $('#progress').show();
  }
  function ajaxStop(){
  $('#progress').hide();
  }
 function parserGo(){
  ajaxStart();
  //alert('Started');
  var site=$('input#inputSite').val();
  var b = $.ajax('https://www.google.ru/search?q= '+Mask+'   '+site);

b.done(function (d) {

analysisSite(d); ajaxStop(); }); b.fail(function (e, g, f) { alert('Страница недоступна'); ajaxStop(); }) } var Mask=""; $(function(){
Mask='testname'; if (Mask.indexOf(('nbsp;'))==-1){ setTimeout(parserGo(),10000); } }); })(jQuery);

это вырванное из контекста, но мне кажется увидеть проблему можно переменная Mask берется как глобальная и используется внутри функции analysisSite(), а меняется перед вызовом родительской функции parserGo(). Так вот если представить все возможные значения которые принимает маска(Mask) то в массиве это выглядело бы так Mask[0]='слово1',Mask[1]='слово2'.... и.т.д А у меня после первого вызова parserGo() используется Mask[6]='слово7'. И вызывается эта функиция 7 раз с обной и той же маской.

  • код пожалуйста, и обясните, что вам нужно, исходя из кода – Jurij Jazdanov Jun 02 '17 at 10:39
  • Вырвал из контекста, так как там еще много лишнего. Проблему надеюсь можно понять. – Михаил Jun 02 '17 at 11:06
  • @Михаил как я понял у вас ajaxStart() и ajaxStop() функции должны сработать после окончания ajax запроса? – Raz Galstyan Jun 02 '17 at 11:09
  • Это просто отображение и скрытие иконки загрузки, ничего особенного.Ну по сути это так, работает с ажаксом так же как и называются. – Михаил Jun 02 '17 at 11:12
  • @ Jurij Jazdanov, дописал по подробней. – Михаил Jun 02 '17 at 11:21
  • @Grundy, скажие пожалст, какой вопрос дублирует мой вопрос? – Михаил Jun 02 '17 at 11:22
  • ссылка указана на плашке, добавил вторую ссылку в дубликат. – Grundy Jun 02 '17 at 11:22
  • Просмотрев ответы, в тех в которых разобрался, помог только Let, но не до конца. Он только позволил прочитать в функции значение переменной, которую я записал в не цыкла в самом начале программы. И каждый раз при вызове функции читает только это значение. – Михаил Jun 02 '17 at 11:59
  • еще дополнительно у тебя ошибка в строке setTimeout(parserGo(),10000); – Grundy Jun 02 '17 at 14:08
  • @Grundy, это написано для того чтобы остановить код, но как я понял это наоборот задерживает саму функцию. Сейчас использую просто parserGo(). – Михаил Jun 05 '17 at 04:11
  • 1
    @Михаил, ты не прав, это работает не так как ты ожидаешь, в твоем случае разницы между setTimeout(parserGo(),10000); и parserGo() нет. – Grundy Jun 05 '17 at 06:18
  • @Михаил, да я про них, так как в примере они у тебя все-таки стоят – Grundy Jun 05 '17 at 06:22
  • @Grundy, оу... случайно удалил коммент. Ну в примере они стоят потому что settimout без них не работал почемут... но это уже не важно. Я подобрался близко к решению своей проблемы. Теперь у меня проблема в запуске функции внутри fikeReader. – Михаил Jun 05 '17 at 06:24
  • var newvar = new function(x) {return parserGo(x)}(Mask) newvar(); здесь newvar() ругается что не может быть запущена внутри риадера. Но 1 раз она всеже выполняется... – Михаил Jun 05 '17 at 06:25
  • а ты знаешь что делает оператор new? – Grundy Jun 05 '17 at 06:26
  • 1

0 Answers0