JS在AJAX调用返回输出之前返回?

时间:2012-10-23 05:50:55

标签: javascript ajax concurrency

  

可能重复:
  How to return AJAX response Text?

我正在调用一个javascript方法,该方法又发送Ajax请求并给出响应。我在回调方法中得到了结果,如“成功”。
在这里,Ajax返回一些结果,同时javascript方法返回结果(某些内容为undefined) 但它应该只返回ajax结果 我发现的问题是,Javascript和Ajax都在同时执行 如何阻止它们并首先执行Ajax,它的结果必须发送到返回结果的函数 任何想法都是高度赞赏的.. :))

1 个答案:

答案 0 :(得分:7)

默认情况下,$.ajax(以及使用它的任何内容,例如$.post)都会发出异步请求。您可以通过指定async:false使请求同步(请参阅documentation)。但是,我不建议您使用同步AJAX请求,因为它会降低性能并导致糟糕的用户体验。相反,请考虑使用在结果完成时在成功处理程序中调用的回调。

以下是两个任意且简单的示例,其中我们有一个锚点,我们希望在单击时从AJAX调用的结果中替换文本。两者都做同样的事情,但第二个是首选,因为它使浏览器保持响应。

同步:

function invokeAjaxSync() {
   var text;

   $.ajax({url: '/path/to/resource', async:false, success: function(result) {
      text = result.toString();
   }}); // will wait until this call is complete

   return text;
}

$('a.example').click(function() {
    $(this).text(invokeAjaxSync()); // works, but the browser will be unresponsive while waiting for a response.
});

异步(更好):

function invokeAjaxAsync(callback) { 
   $.ajax({url:'/path/to/resource', success: function(result) {
         callback(result);
   }});
}


$('a.example').click(function() {
     var $this = $(this);

     invokeAjaxAsync(function(result) {
        $this.text(result.toString());
     }); // browser will remain responsive, but still update text when the AJAX call completes.
});