JQuery $ .ajax在Safari中运行超时而非错误调用成功方法

时间:2010-08-31 16:52:03

标签: jquery ajax safari

我注意到Safari中jQuery的这种奇怪行为。设置完呼叫后如下:

$.ajax( {
    'url' : url,
    'dataType' : 'json',
    data : reqdata,
    timeout: 20000, //10 secs of timeout 
    success : function(data, textStatus, XMLHttpRequest) {
        console.log("success");
        if ((data === null) || (data.length == 0)) {
            ts.doAction( {
                'actionName' : 'timeout',
                'request' : {
                    'reqdata' : reqdata,
                    'actionName' : actionName,
                    'url' : url
                },
                'controller' : ts
            });
        }

        ts.doAction( {
            'actionName' : actionName,
            'data' : data
        });
    },
    error : function(XMLHttpRequest, textStatus, errorThrown) {
        console.log("error: " + textStatus);

        if (textStatus == "timeout") {
            ts.doAction( {
                'actionName' : 'networkFailureError',
                'request' : {
                    'reqdata' : reqdata,
                    'actionName' : actionName,
                    'url' : url
                },
                'controller' : ts
            });
        } else {
            ts.doAction( {
                'actionName' : 'serverError',
                'request' : {
                    'reqdata' : reqdata,
                    'actionName' : actionName,
                    'url' : url
                },
                'controller' : ts
            });
        }
    }
});

如果发生超时(我关闭本地网络服务器),将调用'success'方法!在textStatus参数中,有一个字符串有“成功”!!!错误处理程序甚至没有被调用....(你可能会注意到我必须告诉问题的唯一方法,就是检查数据参数,如果它是null或0长...为什么这种行为?怎么能我避免这个?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。

我发现它取决于超时时间。使用chrome,超过2000毫秒的超时,一切都按预期工作,但是为了更长的超时,不会调用成功处理程序。

答案 1 :(得分:0)

听起来你的请求正在被缓存。

尝试设置$.ajax选项的cache: false来电。根据{{​​3}}:

  

如果设置为false,它将强制执行   您请求不是的页面   由浏览器缓存。

您可能还想通过使用Firebug,Fiddler或其他一些Web请求监控工具查看请求/响应来验证您的请求的响应是否正在缓存。