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

您还可以进行第一个 ajax 调用,在成功时调用第二个:

$('.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 回答
0

您可以将每个返回值保存在代码对象中(因为您处于不同的上下文中,您必须解决“this”)。然后,您可以使用第三个函数来检查数据对象是否已加载......并在两者都存在后开始解析。

$('.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 回答