JQuery AJAX запрашивает тайм-аут после первого запроса - PullRequest
0 голосов
/ 22 марта 2012

Я пишу приложение с использованием 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)

1 Ответ

1 голос
/ 03 апреля 2012

У меня была такая же проблема с PhoneGap 1.5 (то есть Apache Cordova 1.5), используя jQuery 1.6.4.Я последовал предложению другого пользователя откатиться до PhoneGap 1.4.1, и это решило проблему для меня.В моем случае это был один конкретный вызов getJSON (или .ajax, неважно, каким образом я выполнял запрос) - после этого одного неудачного вызова (который всегда будет зависать) каждый последующий вызов не удался.Очевидно, что проблема PhoneGap какой-то.Помимо замены файла JAR и файла Javascript, при откате на 1.4.1 не забудьте изменить имена плагинов на старые имена com.phonegap. * В вашем plugin.xml и переименовать ваш cordova.xmlв phonegap.xml (и измените имя блока Cordova).

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...