3

次のコードを使用して、XMLHttpRequest の open/send メソッドにフックしています。

var lastParams = '';
var send = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function(data){
   lastParams = data;
   send.call(this, data);
};

var open = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(method, uri, async, user, pass) {
    this.addEventListener("readystatechange", function(event) {  
    if(this.readyState == 4){
       var self = this;
       var response = {
         method: method,
         uri: uri,
         params: lastParams,
         responseText: self.responseText
      };
      console.log(response);  
    }
  }, false);
  open.call(this, method, uri, async, user, pass);
};

一度に単一の ajax リクエストの場合は正常に機能しています。

一度に複数の ajax リクエストが起動されると、lastParams に間違ったデータが含まれる可能性があります (lastParams に他の ajax リクエストからのデータが含まれる可能性があることを意味します)。lastParams をリクエストの他の属性と一意に関連付けたいですか?

ajaxリクエストインスタンスを一意に識別できるように、XMLHttpRequestにid属性はありますか?

前もって感謝します。

4

3 に答える 3

1

一部のデータを指定された XMLHttpRequest インスタンスに一意に関連付けるには、単純にプロパティを XMLHttpRequest インスタンスに追加し、データをプロパティに保存します。例えば:

// generating data for request
var data=generateData();

// sending data
var xhr=new XMLHttpRequest();
xhr.open("POST","/yourpage.php",true);
xhr.onreadystatechange=function(event){
  if(this.readyState===4){
    console.log(this.mySendedData);
  }
};
/** if you need to preserve 'data' variable value for each xhr **/
xhr.mySendedData=data;
/***************************************************************/
xhr.send(data);
于 2012-05-07T09:22:58.703 に答える
0

「lastParams」を配列として作成してみませんか。毎回上書きするのではなく、常にデータをプッシュします。

于 2012-05-07T09:29:24.470 に答える