2015-10-27 3 views
2

У меня есть функция ajax, и я ожидаю, что она будет работать 1912 раз, но по какой-то причине она работает только один раз. Я использую startAt и stopAt, чтобы определить, когда он должен перестать работать, но по какой-то причине он не работает. Что я делаю не так?Ajax работает только один раз

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
<script type = "text/javascript"> 
function callAjax(gotoUrl, link, startAt, stopAt, output) { 

    $.ajax({ 
    type: "POST", 
    url: gotoUrl, 
    data: { link : link }, 
    error: function(xhr,status,error){ 
     alert("error"); 
    }, 
    success:function(data) { 
     document.getElementById(output).innerHTML += startAt; 
    }, 
    complete:function(data) { 
     startAt++; 
     var link = data; 
     if (startAt < stopAt) { 
     setTimeout(function(){ 
      callAjax(gotoUrl, link, startAt, stopAt, output) 
     }, 100); 
     } 
    } 
    }); 

} //end of function callAjax() 
</script> 

<body onload = 'callAjax("test1.php", "link", 1, 1912, "output")'> 
<div id = "output"></div> 

Результат:

1 

Ожидаемый результат:

1912 
+0

Вы помещаете startAt ++; внутри асинхронного вызова, почему бы не поставить его для того, чтобы фактически выполнить вызов ajax? – jstuartmilne

+0

Зачем вам нужен вызов 'setTimeout()'? Просто позвоните в функцию ... – Chris

+1

@ Крис Я хочу паузу на 100 миллисекунд. – frosty

ответ

2

Вопрос находится на этой линии:

var link = data; 

вы переназначаете значение link для возврата данных.

Вы тогда немедленно вызвать это внутри таймаута:

callAjax(gotoUrl, link, startAt, stopAt, output) 

Но link не является ссылкой больше его объект, следовательно, JQuery ошибки вне, и тихо умирает после одной итерации.

Удаление этой строки делает функцию кода прекрасной, вам просто нужно сохранить данные в другой переменной, и она будет работать.

Here's a fiddle with the functional code with just that line commented out.

+0

Ссылка - это данные ...? – frosty

+0

Ссылка - это объект. – frosty

+0

Есть ли способ конвертировать объект обратно в строку? – frosty

Смежные вопросы