私のphpサーバーに問題があります(私のコンピューターは唯一の接続です)。最初は、その理由の一部は ajax リクエストが多すぎるためだと考えていたので (キーストロークごとに ajax リクエストを実行するスクリプトを持っています)、キューへの ajax リクエストのフローを制御する設計を実装しました。以下は私のコードです:
//global vars:
activeAjaxThread = 0; //var describing ajax thread state
ajaxQue = []; //array of ajax request objects in queue to be fired after the completion of the previous request
function queRequest(ajaxObj) {
ajaxQue.push(ajaxObj);
if (activeAjaxThread == 0) {
fireOffAjaxQue();
} else {
return 'ajax thread is running';
}
}
function fireOffAjaxQue () {
activeAjaxThread = 1;
//getLastRequest();
if ((ajaxQue.length > 0) && activeAjaxThread == 1) {
$.ajax(ajaxQue[0]).always( function () {
ajaxQue.shift();
if (ajaxQue.length > 0) {
fireOffAjaxQue(); //fire off another ajax request since this one has been completed.
}
});
}
activeAjaxThread = 0; //thread has finished executing
}
実装:
//create ajax object
var ajaxObj = {
url: 'someplace.php',
data: dataVar,
success: function (data) {...}
};
//send ajax object to que
queRequest(ajaxObj);
次に、Javascript がマルチスレッドであることを知り、 John Resig (jQuery extra-ordinaire )
その場合、ここで紹介した関数は結果を生成しませんか? Javascript が既に要求をキューに入れているからです。奇妙なことは、それが劇的に変化するように見えることです. 私のサーバーはあまりクラッシュしません (想像の範囲を超えてそれを解決策と見なすわけではありません... ああ)、クラッシュして再起動した後、以前にキューに入れられた ajax リクエストが送信されます。サーバーがクラッシュすると、空中に消えます。
シングルスレッドの Javascript が非同期イベントをキューに入れる場合:
- Ajax リクエスト マネージャーまたはキューを使用する意味はありますか?
- コードが結果を生成するのはなぜですか?