1

私の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 が非同期イベントをキューに入れる場合:

  1. Ajax リクエスト マネージャーまたはキューを使用する意味はありますか?
  2. コードが結果を生成するのはなぜですか?
4

1 に答える 1

4

Javascript はシングル スレッドですが、AJAX リクエストが送信されると、いわば JavaScript の手に負えなくなります。それが AJAX の非同期部分です。リクエストが行われ、コードが次に進みます。次に、応答が受信されると、それが処理されます。リクエストはキューに入れられません。

于 2013-02-12T21:02:42.777 に答える