0

ユーザーがボタンをクリックすると、2 つの ajax 関数呼び出しを実行しようとしています。

私は持っている

$('.test').on('click', function(){

    code.getCode();
        code.getText();
})

code.prototype.getCode=function(){
     var call=//call ajax
     call.callback= function(data){
          //parse return data
    }
}


code.prototype.getText=function(){
     var call=//call ajax
     call.callback= function(data){
          //parse return data
    }
}

私は 1 つの ajax 呼び出ししか実行できず、1 つの ajax 呼び出しだけがデータを返します。これを解決する方法がわかりません。何か案は?どうもありがとう!

4

3 に答える 3

2

正しく理解できたかどうかはわかりませんが、両方の ajax 呼び出しから単一のコールバックを探していると思います..

$.when.doneを使用する必要があります。下記参照、

$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1,  a2){
    /* a1 and a2 are arguments resolved for the 
        page1 and page2 ajax requests, respectively */
   var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */
   if ( /Whip It/.test(jqXHR.responseText) ) {
      alert("First page has 'Whip It' somewhere.");
   }
});

シーケンスを探しているのか、コールバックを 1 つしようとしているのかわからない。

于 2012-11-06T23:12:50.463 に答える
0

各戻り値をコード オブジェクトに保存することもできます (別のコンテキストにいるため、"this" を回避する必要があります)。次に、データ オブジェクトがロードされているかどうかを確認する 3 番目の関数を使用できます。両方がロードされたら、解析を開始します。

$('.test').on('click', function(){
    code.getCode();
    code.getText();
})
code.prototype.getCode=function(){
     var call=//call ajax
     var that = this;
     call.callback= function(data){
          //parse return data
          that.codeData = data;
          parseData();
    }
}
code.prototype.getText=function(){
     var call=//call ajax
     var that = this;
     call.callback= function(data){
          //parse return data
          that.textData = data;
          parseData();
    }
}
function parseData() {
 if(!code.textData || !code.codeData) return;
 ... work with both
}
于 2012-11-06T23:23:19.420 に答える
0

最初の ajax 呼び出しを行い、成功時に 2 番目を呼び出すこともできます。

$('.test').on('click', function(){

var datastr = "your data";

 $.ajax({  
  type: "POST",  
  url: "url",  
  data: datastr,  
  success: function(successMsg) {                   
          //ajax done
          if (/* not yet complete */) {
            setTimeout(secondAjaxCall(),500);
          } else {
            secondAjaxCall();
         }
      }
  });

});
于 2012-11-06T23:18:53.073 に答える