【问题标题】:how to wait for an ajax call to return如何等待ajax调用返回
【发布时间】:2011-11-15 07:34:13
【问题描述】:

我正在尝试使用 JQuery,尽管我正在努力成功等待 ajax 调用成功,然后再执行进一步的代码。有没有办法等待ajax调用?我见过一些例子,但似乎只是盲目地等待 x 秒?

谢谢, 詹姆斯

【问题讨论】:

标签: javascript jquery html


【解决方案1】:

是的,你可以同步请求:

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:

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

【讨论】:

    【解决方案2】:

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

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

    考虑 jQuery 网站上给出的示例:

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

    您可以在此处看到有一个 success 处理程序附加了一个方法。该方法会在ajax方法返回成功时执行。

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

    【讨论】:

    • 延期是现在要走的路。
    【解决方案3】:

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

    $.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
    });
    

    【讨论】:

      【解决方案4】:

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

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

      但是通过 deferds 你可以:

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

      请参阅这篇文章。

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

      【讨论】:

        【解决方案5】:
        1. 使用异步:false
        2. 或使用回调函数

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 2016-09-03
            • 2010-10-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多