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