ajax同步调用超时

时间:2010-02-03 20:37:32

标签: ajax asynchronous timeout synchronous

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

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

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

尽管在我的应用程序中,Timeout与异步调用完美配合, 但对于一个特定的场景,我需要一个同步调用(javascript实际上应该等待,直到它从服务器回来),这也可以正常工作。但我需要处理一个场景,其中服务器可能需要很长时间,并且可能会调用ajax超时。

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

由于

2 个答案:

答案 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”时,我相信浏览器在等待响应时实际上会锁定。如果您绝对需要,则应该只使用同步请求(因为浏览器已锁定)。