Взаимодействие с пользователем иногда портит запросы jQuery ajax в UIWebView

Я создаю приложение для iPhone, которое отображает UIWebView, указывающий на созданное мной веб-приложение.

Веб-приложение часто выполняет вызовы веб-службы для элементов данных, которые используются для анимации элементов управления на холсте. Вызовы данных используют jQuery ajax, передают параметры через JSON и получают ответ XML.

Я обнаружил, что пока происходит взаимодействие пользователя с UIWebView, метод javascript setTimeout заблокирован и, похоже, не выполняется вообще . Справедливо; есть способы обойти это.

Но главная проблема в том, что время от времени после взаимодействия с пользователем (масштабирование, панорамирование и т. д.) вызовы веб-службы ajax все время просто терпят неудачу, и я не могу установить причину. Даже если они будут повторяться неоднократно, в течение следующих нескольких минут ни один из них не дойдет до веб-службы. Если вы полностью оставите UIWebView в покое, они никогда не выйдут из строя, пока веб-служба активна и подключение присутствует.

Кто-нибудь может предложить, почему и как исправить / обойти это?

Быстрое обновление: согласно мобильному отладчику Safari, ответ « 'объект в функции ошибки не определен. (Это работает, если, например, я делаю URL-адрес недействительным. Затем это можно вызвать из objective-c с помощью [webView stringByEvaluatingJavascript: @ "lastError"], но выдает исключение для этой ошибки «коснулся uiwebview»):

    $.ajax({
    type: "POST",
    url: "WebService.asmx/GetValues",
    async: true,
    data: "{'pageVersionIndex': " + PageVersionIndex + " , 'timeStreamIndex': '" + TimeStream + "'}",
    contentType: "application/json; charset=utf-8",
    dataType: "xml",
    success: function (response) { UpdateControls(response); },
    error: function (response, status, errorthrown) {
        calling = false;
        lastError = response.statusText; //Throws exception
        connectionInterrupted = true;
        DataRoutine = window.setTimeout(DataService, dataFrequency); }
    });
7
задан Toby Wilson 14 January 2011 в 14:34
поделиться