Я создаю приложение для 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); }
});