在jquery ajax之后如何做其他jquery事情

时间:2011-06-10 22:44:06

标签: javascript jquery jquery-deferred

我正在使用PHP。我想完成jQuery AJAX流程,(完成流程后数据返回主页)。

然后做下一个jQuery的事情。关于如何做的任何想法?

$.ajax({
  url: "page1.php", 
  dataType: "html",
  type: 'POST', 
  data: "value=" + value, 
  success: function(data){
    //some process
  }
});//ajax1
$.ajax({
  url: "page2.php", 
  dataType: "html",
  type: 'POST', 
  data: "value=" + value, 
  success: function(data){
    //some process
  }
});//ajax2
$.ajax({
  url: "page3.php", 
  dataType: "html",
  type: 'POST', 
  data: "value=" + value, 
  success: function(data){
    //some process
  }
});//ajax3

// finish all the 3 ajax process, do the below code
$(".page").css('display','block');

3 个答案:

答案 0 :(得分:12)

如果您使用的是jQuery 1.5或更高版本,则可以使用天堂般的$.when构造,该构造使用首先在该版本的jQuery中实现的$.Deferred概念。当所有几个AJAX请求都已完成时,您可以运行一个函数(或多个函数)。

所以你的代码看起来像这样:

$.when($.ajax({
    url: "page1.php",
    dataType: "html",
    type: 'POST',
    data: "value=" + value,
    success: function (data) {
        //some process
    }
}), $.ajax({
    url: "page2.php",
    dataType: "html",
    type: 'POST',
    data: "value=" + value,
    success: function (data) {
        //some process
    }
}), $.ajax({
    url: "page3.php",
    dataType: "html",
    type: 'POST',
    data: "value=" + value,
    success: function (data) {
        //some process
    }
})).then(function () {

});

答案 1 :(得分:2)

如果你有任意数量的ajax操作,你可以这样做:

var arr = [];
arr.push($.ajax(...));
arr.push($.ajax(...));
/* put as many ajax operations as you want into arr */
$.when.apply(arr).then(function() { /* on success */ },
                       function() { /* on error */ });

这是我最喜欢的同步多个ajax调用的技术。

答案 2 :(得分:1)

只是为了记录,所以jQuery-1.5之前的答案也在这里:

$.ajax({
  url: "page1.php", 
  dataType: "html",
  type: 'POST', 
  data: "value=" + value, 
  success: function(data){
    $.ajax({
      url: "page2.php", 
      dataType: "html",
      type: 'POST', 
      data: "value=" + value, 
      success: function(data){
        $.ajax({
          url: "page3.php", 
          dataType: "html",
          type: 'POST', 
          data: "value=" + value, 
          success: function(data){
            // finish all the 3 ajax process, do the below code
            $(".page").css('display','block');
          }
        });//ajax3
      }
    });//ajax2
  }
});//ajax1

希望,如果没有别的,这说明了新的jQuery 1.5做事方式的价值: - )