可能重复:
如何返回 AJAX 响应文本?
我正在调用一个 javascript 方法,该方法反过来发送 Ajax 请求并给出响应。我在回调方法中得到结果,如“成功”。
这里 Ajax 正在返回一些结果,即 javascript 方法返回结果(未定义的东西)。
但它应该只返回 ajax 结果。
我发现的问题是,Javascript 和 Ajax 都在同时执行。
如何停止它们并首先执行 Ajax,它的结果必须发送到返回结果的函数。
任何想法都受到高度赞赏.. :)
可能重复:
如何返回 AJAX 响应文本?
我正在调用一个 javascript 方法,该方法反过来发送 Ajax 请求并给出响应。我在回调方法中得到结果,如“成功”。
这里 Ajax 正在返回一些结果,即 javascript 方法返回结果(未定义的东西)。
但它应该只返回 ajax 结果。
我发现的问题是,Javascript 和 Ajax 都在同时执行。
如何停止它们并首先执行 Ajax,它的结果必须发送到返回结果的函数。
任何想法都受到高度赞赏.. :)
默认情况下,$.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.
});