jQuery AJAX在第一次请求后请求超时

时间:2012-03-21 20:13:29

标签: javascript jquery android cordova

我正在使用PhoneGap / jQuery编写一个应用程序,它从远程服务器获取JSON数据。我已经制作了两个(大致)等效的“getJSON”函数,一个使用标准JavaScript,另一个使用jQuery:

getJSON = function(url, callback) {
    var request = new XMLHttpRequest();
    request.open("GET", url, false);
    request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");

    request.onreadystatechange = function() {
        if (request.readyState != 4) {
            return;
        }

        if (request.status == 200) {
            callback(JSON.parse(request.responseText));
        } else {
            alert("Error: " + request.status);
        }
    }
    request.send(null);
};

在我尝试的所有情况下,标准(虽然可能不优雅)功能似乎都能正常工作。但是,jQuery版本:

jqGetJSON = function(url, callback) {
    $.ajax(url, {
        cache: false,
        success: callback,
        error: function(jqxhr, message) {
            alert("AJAX error: " + message + ". Please retry.");
        }
    });
};

......似乎只能工作一次。我这样打电话:

getJSON("http://example.com/blah/json", function(data) {
    alert(JSON.stringify(data));
}); // this works multiple times

jqGetJSON("http://example.com/blah/json", function(data) {
    alert(JSON.stringify(data);
}); // this succeeds

jqGetJSON("http://example.com/blah/json", function(data) {
    alert(JSON.stringify(data);
}); // this times out

第二个调用永远不会返回,并且每次向另一个请求发出请求时,向jQuery选项添加'timeout'参数会一直调用错误函数。我也找不到任何类型的控制台输出。对其他URL的不同jQuery请求也会起作用(例如,单独的“搜索”和“获取信息”请求),但只有一次,并且重新启动应用程序可以解决问题。

我确信我在这里遗漏了一些明显的东西,也许更熟悉的人可以提供一些关于它是什么的见解?

提前致谢!

(我正在使用带有jQuery 1.7.1的PhoneGap 1.5,并在运行Android 2.3.7的设备上进行测试)

1 个答案:

答案 0 :(得分:1)

我使用jQuery 1.6.4在PhoneGap 1.5(即Apache Cordova 1.5)上遇到了同样的问题。我按照另一个用户的建议回滚到PhoneGap 1.4.1,它解决了我的问题。在我的例子中,这是对getJSON(或.ajax,对我执行请求的方式无关紧要)的一个特定调用 - 在一次失败的调用(总是超时)之后,每个后续调用都失败了。显然是某种PhoneGap问题。除了替换JAR文件和Javascript文件之外,当回滚到1.4.1时,不要忘记将插件名称更改回plugin.xml中的旧com.phonegap。*名称并重命名cordova.xml到phonegap.xml(并更改cordova块名称)。

祝你好运!

相关问题