0

以下のコードを参照してください。

function createXMLHttpRequestObject() {
    // will store the reference to the XMLHttpRequest object
    var ajaxRequest;
    // create the XMLHttpRequest object
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("Your browser broke!");
                return false;
            }
        }
    }
    // return the created object or display an error message
    if (!ajaxRequest) alert("Error creating the XMLHttpRequest object.");
    else return ajaxRequest;
}


function ajax_update() {
  var ajaxRequest = createXMLHttpRequestObject();

  ajaxRequest.onreadystatechange = function(){

    if(ajaxRequest.readyState != 4){ 
    ...
    }

    if(ajaxRequest.readyState == 4){
    //process JSON data
    }
  }
}

ajax_update() 関数の外側から ajaxRequest.readyState 値を監視/リッスンしようとしています。ajax_update() は、ボタンの onlick でトリガーされます。

私の目的は、関数 ajax_update() の外側にあり、すべての Ajax 呼び出しが完了した場合にのみ別の JS 関数を起動することです。つまり、ajaxRequest.readyState==4 を意味します。

例:

 <input type='button' value='SEND QUOTE' onclick=\"ajax_update(some params); function_that_fires_when_readystate_is_completed();\">

何か案は?

前もって感謝します!

4

3 に答える 3

0

コールバックを使用します。

JS

function ajax_update(callback) {
  var ajaxRequest = createXMLHttpRequestObject();
  ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4){
      callback();
    }
  };
  xmlhttp.open(...);
  xmlhttp.send(null);
}

HTML

<input onclick="ajax_update(function_that_listens_to_readyState);">
于 2012-06-11T19:51:20.557 に答える
0
ajaxRequest1.onreadystatechange = function(){

    if(ajaxRequest.readyState != 4){ 
    ...
    }

    if(ajaxRequest.readyState == 4){
    //process JSON data
       firstIsReady  = true;
       check();
    }
  }

ajaxRequest2.onreadystatechange = function(){

    if(ajaxRequest.readyState != 4){ 
    ...
    }

    if(ajaxRequest.readyState == 4){
    //process JSON data
       secondIsReady  = true;
       check();
    }
  }

function check() {
    if (firstIsReady && secondIsReady) {
        //both ajax calls completed
    }
}

そんな感じ。それは本当に醜いですが、あなたが何をしたいのかを正確に知らなければ、それを行うためのより良い方法を提供することはできません.

于 2012-06-11T19:58:13.207 に答える
0

これをグローバルに定義する

 var requestCounter = 0;

その後

function ajax_update() {
  var ajaxRequest = createXMLHttpRequestObject();
  //after calling request.open();
    requestCounter++;

  ajaxRequest.onreadystatechange = function(){  

    if(ajaxRequest.readyState != 4){ 
          requestCounter--;
          //error code here
    }

    if(ajaxRequest.readyState == 4){
        //process JSON data
          requestCounter--;
    }

     if (requestCounter == 0)
          onAllRequestComplete();
  }
}


     function onAllRequestComplete(){
        // code that have to run when all requests have been completed
     }

その助けを願っています。

于 2012-06-11T19:42:50.377 に答える