我正在使用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,并在运行jQuery 2.3.7的设备上进行测试)
发布于 2012-04-04 01:43:44
我在使用jQuery 1.6.4的PhoneGap 1.5 (即Apache Cordov1.5)上也遇到了同样的问题。我听从了另一个用户的建议,回滚到PhoneGap 1.4.1,它为我解决了这个问题。在我的例子中,这是一个对getJSON (或.ajax,与我以何种方式执行请求无关)的特定调用-在那个失败的调用(总是会超时)之后,后续的每个调用都会失败。显然是某种PhoneGap问题。除了替换JAR文件和Javascript文件之外,当回滚到1.4.1时,不要忘记将插件名称更改回您的plugin.xml中的旧com.honegap.*名称,并将您的cordova.xml重命名为phonegap.xml (并更改cordova块名称)。
祝好运!
https://stackoverflow.com/questions/9812124
复制相似问题