我正在使用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的设备上进行测试)
答案 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块名称)。
祝你好运!