Я пишу приложение с использованием 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
Второй вызов никогда не возвращается, и добавление параметра «timeout» в опции jQuery постоянно вызывает функцию error каждый раз, когда делается другой запрос. Там также нет консольного вывода любого вида, который я смог найти. Различные jQuery-запросы к другим URL-адресам также будут работать (например, отдельные запросы "search" и "get info"), но снова только один раз, и перезапуск приложения устраняет проблему.
Я уверен, что мне здесь не хватает чего-то очевидного, может быть, кто-то более знакомый может подсказать, что это такое?
Заранее спасибо!
(я использую PhoneGap 1.5 с jQuery 1.7.1 и тестирую на устройстве под управлением Android 2.3.7)