Buduję aplikację na iPhone'a, która wyświetla interfejs UIWebView wskazujący na utworzoną aplikację internetową.Czasami interakcje użytkownika powodują utratę żądań ajax jQuery w UIWebView
Aplikacja internetowa wykonuje częste wywołania serwisowe do elementów danych, które służą do animowania elementów sterujących na obszarze roboczym. Wywołania danych wykorzystują jQuery ajax, przekazując parametry za pośrednictwem JSON i otrzymując odpowiedź XML.
Dowiaduję się, że podczas interakcji użytkownika z UIWebView występują, metoda setTimeout javascript jest zablokowana i nie wydaje się, aby w ogóle wykonać. Słusznie; są sposoby obejścia tego.
Ale głównym problemem jest to, że od czasu do czasu interakcje użytkownika (powiększanie, przesuwanie, itp.) Wywołania usługi internetowej ajax po prostu zawodzą przez cały czas i nie mogę ustalić przyczyny. Nawet jeśli są wykonywane wielokrotnie, przez kilka następnych minut żadna z nich nie przejdzie nawet do usługi sieciowej. Jeśli całkowicie opuścisz interfejs UIWebView, nigdy się nie zawiedzie, dopóki usługa internetowa jest uruchomiona, a łączność jest obecna.
Czy ktoś może sugerować, dlaczego i jak to naprawić/obejść?
Szybka aktualizacja: zgodnie z mobilnym debugerem Safari, obiekt "response" w funkcji błędu jest niezdefiniowany. (Działa to, gdy na przykład powoduję, że adres URL jest nieważny, może on zostać wywołany z obiektu c przez [webView stringByEvaluatingJavascript: @ "lastError"], ale zgłasza wyjątek dla tego błędu "dotknął 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); }
});
myślę, że będzie to dobry pomysł, aby zastąpić odpowiednią etykietę dla iPhone jeden z dostępnych tagów (być może "aplikacje internetowe"). – Pointy
Dobry pomysł, zrobię. –