問題は、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