ajax的新手,所以提出一个非常基本的问题。
- 是否无法在设置超时的情况下进行同步ajax调用(async:false)。?
http://www.ajaxtoolbox.com/request/
尽管在我的应用程序中,Timeout与异步调用完美配合, 但对于一个特定的场景,我需要一个同步调用(javascript实际上应该等待,直到它从服务器回来),这也可以正常工作。但我需要处理一个场景,其中服务器可能需要很长时间,并且可能会调用ajax超时。
我可以参考ajax的其他标准文档吗?
由于
答案 0 :(得分:1)
基本上,在同步ajax请求期间,浏览器被阻止,并且在浏览器被阻止时不能执行javascript。因此,jQuery无法在设置超时后中止ajax请求,因为jQuery是javascript并且在浏览器被阻止时无法执行javascript。这是同步ajax的主要缺陷。
任何时候你可能想要一个同步请求,你应该使用一个异步的请求,然后在回调中发生什么,如下所示;
$.ajax({
url : 'webservices.php',
timeout: 200,
dataType : 'json',
data : {
'cmd' : 'ping',
},
success : function(data, textStatus) {
$.ajax({
url : 'webservices.php',
async: false,
dataType : 'json',
data : {
'cmd' : 'feedback',
'data' : data,
'userinfo' : window.dsuser
},
success : function(data, textStatus) {
// success!
Status("Thanks for the feedback, "
+ window.dsuser.user + "!");
}
});
},
error : function(jqhdr, textStatus,
errorThrown) {
Status("There was trouble sending your feedback. Please try again later");
}
});
答案 1 :(得分:0)
我不相信可以在同步呼叫上设置超时。当你设置“async:false”时,我相信浏览器在等待响应时实际上会锁定。如果您绝对需要,则应该只使用同步请求(因为浏览器已锁定)。