6

ajax 新手,所以问了一个非常基本的问题。

-- 有没有办法在设置超时的情况下进行同步 ajax 调用 (async:false)。?

http://www.ajaxtoolbox.com/request/

虽然在我的应用程序中,超时与异步调用完美配合,但对于一个特定的场景,我需要一个同步调用(javascript 实际上应该等到它从服务器收到回复),这也很好用。但我需要处理服务器可能需要很长时间并且可能会调用 ajax 超时的情况。

还有其他我可以参考的 ajax 标准文档吗?

谢谢

4

2 回答 2

2

基本上,在同步 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");
    }
});
于 2016-03-15T10:16:03.110 回答
1

我不相信可以在同步调用上设置超时。当您设置“async:false”时,我相信浏览器实际上在等待响应时会锁定。如果您绝对需要(因为浏览器锁定),您应该只使用同步请求。

于 2010-02-03T20:45:39.757 回答