如何等待ajax调用返回

时间:2011-09-12 12:28:34

标签: javascript jquery html

我正在尝试使用JQuery,尽管我在努力成功等待ajax调用成功然后执行更多代码。有没有办法等待ajax打电话?我看过一些例子,但似乎只是盲目地等待x秒钟?

谢谢, 詹姆斯

6 个答案:

答案 0 :(得分:4)

是的,您可以同步请求:

var bodyContent = $.ajax({
      url: "script.php",
      global: false,
      type: "POST",
      data: {id : this.getAttribute('id')},
      dataType: "html",
      async:false,
      success: function(msg){
         alert(msg);
      }
   }
).responseText;

来源:http://api.jquery.com/jQuery.ajax/

但是,同步请求是一个倒退,因为JS引擎(在某些浏览器中,用户界面)将阻塞,直到请求完成。 Douglas Crockford曾写过synchronous requests

同步编程是不尊重的,不应该在人们使用的应用程序中使用。

答案 1 :(得分:1)

jQuery的ajax方法有一个成功的处理程序。

您应该将您想要触发的代码放在附加到此处理程序的方法中。

考虑一下jQuery网站上给出的例子:

$.ajax({
  url: "test.html",
  context: document.body,
  success: function(){
    $(this).addClass("done");
  }
});

你可以在这里看到有一个附有方法的success处理程序。当ajax方法成功返回时,将执行此方法。

正如其他答案和下面的评论中所指出的,您现在可以使用延迟而不是这个简单的success handeler。这允许您将多个动作附加到每个给定的事件。

答案 2 :(得分:1)

看看jQuery deferreds。您不能暂停此操作,但可以在AJAX调用返回后调用其他代码。

// No way to stop.
$.ajax(...);
doSomething();

但是对于延期,你可以:

$.ajax(...).success(function() {
   doSomething();
});

请参阅此文章。

http://www.erichynds.com/jquery/using-deferreds-in-jquery/

答案 3 :(得分:0)

您必须在“成功”功能中插入代码:http://api.jquery.com/jQuery.ajax/

答案 4 :(得分:0)

  1. 使用async:false
  2. 或使用回调函数

答案 5 :(得分:0)

您可以使用成功或完整的回调。如果服务器返回200,则触发成功。无论响应状态如何,完成将在请求完成时触发。

$.ajax({
    url: "/path/to/action",
    success: function() {
        alert("do something if it's successful");
    },
    complete: function(request, status) {
        alert("do something when it's finished, regardless of success.");
    }
});

或者您可以进行同步通话:

$.ajax({
    url: "/path/to/action",
    async: false
});