ホームページ  >  記事  >  ウェブフロントエンド  >  AJAX キューリクエストの実装方法 (コード付き)

AJAX キューリクエストの実装方法 (コード付き)

php中世界最好的语言
php中世界最好的语言オリジナル
2018-04-03 10:11:192460ブラウズ

今回は、AJAX キュー リクエストの実装方法 (コード付き) と、AJAX キュー リクエストの実装における 注意事項 を​​説明します。実際のケースを見てみましょう。

AJAX を使用すると、ユーザーが短期間に複数の非同期リクエストを実行する場合、前のリクエストが完了していないと、ほとんどの場合、最後のリクエストはキャンセルされますが、影響はありません。たとえば、新しいリストがリクエストされた場合、古いリクエストは必要ありませんが、WEB プログラムが複数のリクエストを同時に非同期で呼び出す必要がある場合、またはユーザーが異なる種類のデータをリクエストする必要がある場合、すべての問題が発生します。実行は完了する必要があるため、ユーザーのリクエストは記録され、順番に実行されます。

異なるブラウザでは異なるスレッドを同時に実行できます。通常、IE では 2 つのスレッドが同時に実行される場合、最新の 2 つのリクエストのみが実行されます。

AJAX キューは非常に簡単です。配列内の各項目は、AJAX を直接実行するのではなく、

リクエスト パラメーター 配列として保存されます。キューに複数のリクエストがあるかどうかを確認します。存在しない場合は、キューにある唯一のアイテムを実行しません(他のアイテムがあるため)。はまだ実行中なので、心配しないでください。他の項目は実行されています。今度はこの項目の番になります)、AJAX の実行が完了したら、現在実行されているキュー項目を削除し、配列をチェックしてキュー項目があるかどうかを確認します。その場合、すべてのリクエストが完了するまで実行を続けます。以下は私が構築したキューです。一部は以前にカプセル化されていました。

//Ajax Function
var reqObj; //Creat Null Instence
var RequestArray = new Array();
//var whichRequest;
//加入请求队列
function AddRequestArray(url,isAsy,method,parStr,callBackFun)
{
    var ArgItem = new Array();
    ArgItem[0]=url;
    ArgItem[1]=isAsy;
    ArgItem[2]=method;
    ArgItem[3]=parStr;
    ArgItem[4]=callBackFun;
    RequestArray.push(ArgItem);   //将当前请求添加到队列末尾
    if(RequestArray.length==1) //如果请求队列里只有当前请求立即要求执行队列,如果有其他请求,那么就不要求执行队列
    {
      ExeRequestArray();
    }
}
//执行队列里的顺序第一个的请求
function ExeRequestArray()
{
  if( RequestArray.length>0) //如果队列里有请求执行 AJAX请求
  {
    var ArgItem = RequestArray[0];  DoRequest(ArgItem[0],ArgItem[1],ArgItem[2],ArgItem[3],ArgItem[4]);
  }
}
//Run Ajax (string urladdress,bool IsAsy,string method,string parameters,string whichRequest)
function DoRequest(url,isAsy,method,parStr,callBackFun) 
{
  reqObj = false;
  //whichRequest = whichReq;
  if (window.XMLHttpRequest) //compatible Mozilla, Safari,...
  {
    reqObj = new XMLHttpRequest();       //Creat XMLHttpRequest Instance
    if (reqObj.overrideMimeType)        //if Mime Type is false ,then set MimeType 'text/xml'
    {
      reqObj.overrideMimeType('text/xml');
    }
  }
  else if (window.ActiveXObject) //compatible IE
  {
    try
    {
      reqObj = new ActiveXObject("Msxml2.XMLHTTP"); //Creat XMLHttpRequest Instance
    }
    catch (e)
    {
      try
      {
        reqObj = new ActiveXObject("Microsoft.XMLHTTP"); //Creat XMLHttpRequest Instance
      }
      catch (e)
      {}
    }
  }
  //if reqObj is false,then alert warnning
  if (!reqObj)
  {
    alert('Giving up :( Cannot create an XMLHTTP instance');
    return false;
  }
  reqObj.onreadystatechange = function(){GetRequest(callBackFun)}; //set onreadystatechange Function
  reqObj.open(method, url, isAsy);    //set open Function
  reqObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); //set RequestHeader
  reqObj.send(parStr);  //do send and send parameters 
}
//get Service Response information Function
function GetRequest(callBackFun)
{
  //judge readystate information
  if (reqObj.readyState == 4)
  {
    //judge status information
    if (reqObj.status == 200)
    {
      eval(callBackFun+"(reqObj)");
    }
    else
    {
      alert('There was a problem with the request.'+reqObj.status+"CallFunction:"+callBackFun); //else alert warnning
    }
    RequestArray.shift(); //移除队列里的顺序第一个的请求,即当前已经执行完成的请求
    ExeRequestArray();   //要求执行队列中的请求
  }
}
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨書籍:

AJAX リクエスト配列の実装方法

Ajax でキャッシュをクリアする方法

以上がAJAX キューリクエストの実装方法 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。