Проблема в том, что вызов ajax является асинхронным. JavaScript помещает это, делает запрос на сервер, а затем переходит к следующей строке кода. Ваши функции обратного вызова успеха и ошибки не вызываются до тех пор, пока JavaScript не завершит выполнение вашего цикла while.
Кроме того, структура кода не имеет никакого смысла (извините, не пытаясь быть грубой). Переменные $ canAppend и $ iPage не используются или не изменяются. Что этот код будет делать, это ввести цикл и никогда не выйти. Почему это? Это связано с тем, что вызов $ .ajax() не блокируется. Он не будет ждать там, пока запрос не будет завершен, он будет продолжен. Поскольку JavaScript (по существу) однопоточный, обратные вызовы для ошибки и успеха НЕ МОГУТ исполняться до тех пор, пока не завершится текущий процесс выполнения. Поскольку не удается запустить обработчики ошибок и ошибок, $ sid не может быть установлен. Поскольку $ sid не может быть отправлен, код не может выйти из цикла while.
Я не вижу, как вы на самом деле используете код while. Вместо этого просто вызовите функцию $ .ajax() и обработайте результаты в вашем обработчике успеха. Попробуйте это сделать, чтобы вы могли лучше понять, что происходит:
$sid = 200;
alert("$sid is 200: " + $sid); // you'll see this first
$.ajax({
url: "tmp/result1.html",
success: function(html)
{
if(html)
{
$("#inzeraty").append(html);
$('div#loadmoreajaxloader').hide();
$sid = 0;
alert("$sid is now 0: " + $sid); // you'll see this third if html is not false
} else {
alert("$sid is STILL 200: " + $sid); // you'll see this third if html is false
}
},
error: function()
{
$sid = 0;
alert("you got an error, but $sid is now 0: " + $sid); // you'll see this third if there's an error
}
});
alert("$sid is still 200: " + $sid); // you'll see this second
Вы понимаете, что AJAX-вызовы асинхронны? –
Чтобы переписать комментарий @Diodeus: Ajax-вызовы асинхронны. Это означает, что они могут вернуться в любое время. Ваш код запускает кучу запросов AJAX в цикле. Код цикла продолжает работать, пока ваши запросы AJAX обрабатываются асинхронно. Весь цикл может быть завершен до того, как будет возвращен первый запрос AJAX. – jahroy
@jahroy хуже даже, обработчики успеха терпеливо ждут, пока цикл не будет завершен. –