Я создаю приложение для iPhone, которое отображает UIWebView, указывающий на созданное мной веб-приложение.
Веб-приложение часто вызывает веб-службы для элементов данных, которые используются для анимации элементов управления на холсте. При вызовах данных используется jQuery ajax, передача параметров через JSON и получение ответа XML.
Я обнаружил, что во время взаимодействия пользователя с UIWebView метод javascript setTimeout блокируется и, похоже, не выполняется вообще. Справедливо; Есть способы обойти это.
Но главная проблема заключается в том, что время от времени после взаимодействия с пользователем (масштабирование, панорамирование и т. Д.) Вызовы веб-службы ajax будут постоянно прерываться, и я не могу установить причину. Даже если они сделаны неоднократно, в течение следующих нескольких минут ни один из них не сможет связаться с веб-сервисом. Если вы полностью оставите UIWebView в покое, они никогда не выйдут из строя, пока работает веб-служба и имеется подключение.
Кто-нибудь может подсказать, почему и как это исправить / обойти?
Быстрое обновление: согласно мобильному отладчику Safari, объект 'response' в функции error не определен. (Это работает, если, например, я делаю URL недействительным. Затем он может быть вызван из target-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); }
});