Cordova iOS AJAX GET请求忽略超时,在10秒后结束

时间:2018-12-20 16:53:59

标签: javascript jquery ios ajax cordova

使用Cordova 8.0.0,iOS 12.1.2尝试向我的服务器发出GET请求。

我可以成功地向服务器发出请求,但是如果由于任何原因花费的时间超过10秒钟,则它将失败。如果花费的时间少于该时间,它将起作用。

这仅对我来说适用于iOS,该应用的Android版本不显示此行为,并尊重我在下面设置的超时。

示例片段:

$.ajax({
            type: "GET",
            url: actionUrl,
            data: data,
            cache: false,
            dataType: "xml",
            timeout: 300000,
            async:   false,
            beforeSend: function (request) {
                request.setRequestHeader("user", settings.userId);
                request.setRequestHeader("sid", settings.sessionKey);
            },
            success: function (results) {
                callback(results);
            },
            error: function (e) {
                if (!surpressError){
                    main.ajaxError(e);
                }

                main.stopLoading();
                if (errorCallback){
                   errorCallback(e);    
                }
            }
        });

Screenshot of request timing

如果我做出async: true或仅取出该请求,则该请求可能会花费10秒以上的时间才能完成,但是使用该旧版应用程序,我宁愿不必对其进行更多更改容纳开关。

我还尝试将<preference name="loadUrlTimeoutValue" value="300000" />添加到config.xml中,并且超时少于1分钟(30000),但这无济于事。

还有其他方法可以确保超时时间超过我错过的10秒吗?

1 个答案:

答案 0 :(得分:0)

我设法通过删除async: false(感谢charlietfl)并执行以下操作来解决此问题:

$.ajax({
    //as above
}).done(function(res) {
    callback(res);
});

这允许请求继续,并且在经过其他超时测试之后,现在似乎也尊重该请求。我还需要在请求的接收端将一些显示代码移到回调内部。

参考:jQuery.ajax() method's async option deprecated, what now?