2011-01-14 8 views
7

私が作成したWebアプリケーションを指すUIWebViewを表示するiPhoneアプリケーションをビルドしています。UIWebViewでユーザーインタラクションがjQueryのajaxリクエストをねじ込むことがあります

Webアプリケーションは、キャンバス上のコントロールをアニメートするために使用されるデータ項目に対して頻繁なWebサービスコールを行います。データの呼び出しでは、jQuery ajaxを使用し、JSONを介してパラメータを渡してXMLレスポンスを受け取ります。

私はUIWebViewとのユーザーのやりとりが発生しているが、javascriptのsetTimeoutメソッドはブロックされており、まったく実行されていないようです。けっこうだ;これを回避する方法があります。

しかし、大きな問題は、ユーザーのやりとり(ズーム、パンニングなど)が行われるたびに、ajax Webサービスコールが常に失敗し、理由がわからないことです。繰り返しても、数分のうちにWebサービスに到達することはありません。 UIWebViewを完全にそのままにしておくと、Webサービスが稼動していて接続性がある限り、決して失敗しません。

誰もがなぜ、どのようにこれを修正/回避することができますか?

クイックアップデート:Safariモバイルデバッガによれば、エラー関数の 'response'オブジェクトは定義されていません。たとえば、URLを無効にすると動作しますが、これは[webView stringByEvaluatingJavascript:@ "lastError"]によってobjective-cから呼び出すことができますが、この '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); } 
    }); 
+1

を役に立てば幸いあなたが持っているタグの1つ(「ウェブアプリケーション」かもしれない)。 – Pointy

+0

いい考えです。 –

答えて

2

あなたはトーストされているのではないかと思います。 iOS SafariとUIWebViewでは、それぞれシステムプロセスがブラウザよりも優先され、ネイティブプロセス(タッチ操作など)のCPUパワーやメモリが突然必要になると、実行中のjavascriptが実行されなくなり、メモリ負荷またはCPU使用率。最悪の部分は、何もエラーも何も投げられないということです。何も起こらないかのようにコード実行を停止するだけです。

あなたのアプリの中でたくさん起こる場合、唯一の方法は、リクエストがブロックされていない場合にはリッスンするタイマーを追加することです。成功するまでもう一度やり直してください。

のiOSの浮き沈み - 彼らは本当にあなたがネイティブに行くのが好きではなく、その後のウェブ:)

が、それは私はために、関連するiPhoneタグを代用するのは良いアイデアだと思い、 トム

+0

アドバイスをいただきありがとうございます。私はすべての方法を使い果たしました。問題を克服できる唯一の方法は、ページ上のjavascriptメソッドを呼び出すのではなく、NSURLConnectionを使用して手動でWebサービスを呼び出すことです。また、タイムアウト、再試行などの制御も強化されています。 –

関連する問題