我需要调用一个返回ajax调用内容的javascript函数。
为了实现这个结果,我在ajax调用中将async选项设置为false。
function ajaxQuery(){ var content; $.ajax({ url: "blabla.html, async: false, success: function(data){ content = data } }); return content; }
不幸的是,将async选项设置为false会使blockUI无法正常工作。 在查询服务器期间,浏览器被冻结而没有消息。
如果我将async选项设置为true,则blockUI正常工作但我的javascript函数返回值undefined,可能是因为ajax查询未完成。
如何在javascript函数中解决这个问题,以获取使ajax调用的内容成为阻塞的工具?
谢谢,
安东尼奥
答案 0 :(得分:8)
你不能。
同步AJAX调用将完全冻结浏览器,应该不惜一切代价避免;没有办法解决这个问题。
相反,您应该使用回调传递值,方式与$.ajax
相同。
答案 1 :(得分:4)
此代码的问题是数据被传递给回调,因此这部分代码
return content;
将在此之前的一段时间内完成
success: function(data){
content = data
}
这是未定义返回的原因。
怎么办?
function contentParse(data){
//do things with data received
}
$.ajax({
url: "blabla.html",
success: function(data){
contentParse(data);
}
});
至少我是这样做的。祝你好运。
答案 2 :(得分:1)
你的问题是你最后会回复内容;相反,修改你注册的成功回调中的dom(或调用一个函数)。您可能希望注册一个错误回调,如果服务器返回200以外的其他内容,则会执行某些操作。
答案 3 :(得分:1)
显示加载的一些状态消息...直到获得响应。
答案 4 :(得分:0)
禁用所有其他控件,直到一个操作完成