用户交互有时会破坏UIWebView中的jQuery ajax请求

我正在构建一个iPhone应用程序,显示指向我创建的Web应用程序的UIWebView。

Web应用程序对数据项进行频繁的Web服务调用,这些数据项用于在canvas上设置控件动画。 对数据的调用使用jQuery ajax,通过JSON传递参数并接收XML响应。

我发现当用户与UIWebView的交互正在发生时,javascript setTimeout方法被阻止,似乎根本不执行。 很公平; 有办法解决这个问题。

但主要的问题是,在用户交互(缩放,平移等)之后,ajax web服务调用将一直失败,我无法确定原因。 即使它们是反复制作的,在接下来的几分钟内,它们都不会通过网络服务。 如果您完全离开UIWebView,只要Web服务启动并且存在连接,它们就永远不会失败。

任何人都可以建议为什么,以及如何解决/解决这个问题?

快速更新:根据Safari移动调试器,错误function中的“响应”对象未定义。 (例如,如果我使URL无效,则可以使用。然后可以通过[webView stringByEvaluatingJavascript:@“lastError”]从objective-c调用它,但是为此’触及uiwebview’错误抛出exception):

$.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); } }); 

我害怕你在某种程度上敬酒…… 在iOS Safari和UIWebView中,系统进程优先于浏览器,如果突然需要更多CPU功率或内存进行本机进程(如处理触摸等),可能会发生任何正在运行的javascript将停止执行以减少内存负载或CPU使用率。 最糟糕的是它不会抛出任何错误或任何东西……它只是停止你的代码执行,好像什么也没发生。

如果它在您的应用程序中发生了很多,唯一的办法就是添加某种计时器,如果请求没有被阻止则会监听,如果是这样的话 – 再次成功直到成功。

iOS的起起落落 – 他们真的很喜欢你本土而不是网络:)

希望它有所帮助,汤姆