2011-01-14 10 views
7

내가 만든 웹 응용 프로그램을 가리키는 UIWebView를 표시하는 iPhone 앱을 만들고 있습니다.사용자 상호 작용으로 인해 UIWebView에서 jQuery ajax 요청이 스크래치 됨

웹 응용 프로그램은 캔버스의 컨트롤에 애니메이션을 적용하는 데 사용되는 데이터 항목에 대한 웹 서비스 호출을 자주 만듭니다. 데이터 호출은 jQuery ajax를 사용하여 JSON을 통해 매개 변수를 전달하고 XML 응답을 받는다.

UIWebView와의 사용자 상호 작용이 발생하는 동안 javascript setTimeout 메서드가 차단되어 전혀 실행되지 않는 것으로 나타났습니다. 충분히 공정하다. 이것 주위에 방법이 있습니다.

하지만 큰 문제는 사용자 상호 작용 (확대/축소, 패닝 등)이있을 때마다 ajax 웹 서비스 호출이 항상 실패하고 이유를 확인할 수 없다는 것입니다. 비록 그들이 반복적으로 만들어 지더라도, 앞으로 몇 분 동안 아무도 웹 서비스에 참여하지 않을 것입니다. UIWebView를 완전히 그대로두면 웹 서비스가 작동하고 연결이 존재하는 한 절대로 실패하지 않습니다.

누구나 제안 할 수 있습니까?이 문제를 해결하는 방법은 무엇입니까?

빠른 업데이트 : Safari 모바일 디버거에 따르면 오류 함수의 '응답'개체는 정의되지 않았습니다. 예를 들어, 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

도움이되기를 바랍니다 태그 중 하나 ("웹 응용 프로그램"). – Pointy

+0

좋은 생각입니다. –

답변

2

나는 당신이 토스트되는 ​​것을 두려워한다. iOS Safari와 UIWebView에서 각각 시스템 프로세스가 브라우저보다 우선 순위를 가지며, 네이티브 프로세스 (예 : 터치 처리 등)에 대한 CPU 성능이나 메모리가 갑자기 요구되는 경우 실행중인 자바 스크립트가 실행을 중지하고 메모리로드 또는 cpu 사용. 최악의 부분은 어떤 에러 나 아무 것도 던지지 않을 것이라는 것입니다. 아무 일도 일어나지 않은 것처럼 코드 실행을 막습니다.

앱에서 많은 일이 발생하면 유일한 방법은 요청이 차단되지 않은 경우 수신 대기하는 타이머를 추가하는 것입니다. 성공할 때까지 다시 시도하십시오.

아이폰 OS의 기복 - 그들은 정말 네이티브 가고 싶어보다는 웹 :

그것이 내가 그것을 위해 관련 아이폰 태그를 대체 할 좋은 아이디어라고 생각 톰

+0

조언 해 주셔서 감사합니다. 나는 모든 방법을 다 써 버렸고 문제를 극복 할 수 있었던 유일한 방법은 페이지의 자바 스크립트 메소드를 호출하는 대신 NSURLConnection을 사용하여 웹 서비스를 수동으로 호출하는 것입니다. 또한 타임 아웃, 재 시도 등을보다 잘 제어 할 수 있습니다. –

관련 문제