4

可能重复:
如何返回 AJAX 响应文本?

我正在调用一个 javascript 方法,该方法反过来发送 Ajax 请求并给出响应。我在回调方法中得到结果,如“成功”。
这里 Ajax 正在返回一些结果,即 javascript 方法返回结果(未定义的东西)。
但它应该只返回 ajax 结果。
我发现的问题是,Javascript 和 Ajax 都在同时执行。
如何停止它们并首先执行 Ajax,它的结果必须发送到返回结果的函数。
任何想法都受到高度赞赏.. :)

4

1 回答 1

8

默认情况下,$.ajax(以及使用它的任何东西,例如$.post)都会发出异步请求。您可以通过指定使请求同步async:false(请参阅文档)。不过,我不建议您使用同步 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.
});
于 2012-10-23T05:53:42.503 回答