2012-01-19 6 views
0

Phonegap 애플리케이션을 개발하고 jQuery Mobile을 사용하고 있습니다. PC에서 Firefox를 통해 개발 및 테스트 중이므로 여기에 설명 된 문제는 Phonegap으로 수행 할 작업이 없습니다. -이 내용은 Firefox PC 문제입니다.Phonegap jQuery ajax 요청이 작동하지 않습니다.

다음 코드는 작동하지 않으며, 올바른 방향으로 날 :

var loadWeather = function() 
{ 
    // Request absetzen 
    $.ajax(
    { 
     // the URL for the request 
     url : 'http://www.google.com/ig/api', 

     // the data to send (will be converted to a query string) 
     data : { 
      weather : 'Vienna' 
     }, 

     // whether this is a POST or GET request 
     type : 'GET', 

     // the type of data we expect back 
     dataType : 'xml', 

     // code to run if the request succeeds; the response is passed to the function 
     success : function(xml) 
     { 
      parseXML(xml); 
     }, 

     // code to run if the request fails; 
     // the raw request and status codes are passed to the function 
     error : function(xhr, status) 
     { 
      alert('Error retreiving weather!'); 
     } 
    }); 
} 

상태는 내가 모든 jQuery를의 이유에 대한 모든 정보를 얻을하지 않습니다 "오류", xhr.readyState = 0, xhr.status = 0입니다. 요청이 실행되고 응답 헤더 (Firebug)는 다음과 같습니다.

Accept: application/xml, text/xml, */*; q=0.01 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Accept-Encoding: gzip, deflate 
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 
Connection: keep-alive 
Host: www.google.com 
Origin: null 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1 

및 200 OK. 그렇다면 왜 내가 오류 케이스에 뛰어 들고 있을까요? xhr.isRejected()는 참이라고 말합니다. 이것은 무엇을 의미 하는가?

+0

(XML 대신 시도) JSONP –

+2

크로스 도메인 원점 제한으로 인해 일부 프록시 스크립트없이 실제 요청으로 테스트 할 수 없습니다. 이 API는 JSONP를 지원하지 않습니다. 하지만 크로스 도메인 영역이 없기 때문에 Phonegap 내부에서 작동 할 것입니다. – dfsq

+0

@ dfsg : 귀하의 의견이 답변 일 경우, 나는 그것을 선택했을 것입니다. 고맙습니다! – ChrLipp

답변

7

좋아요, 여기에는 여러 가지가 있습니다. 먼저 파이어 폭스는 AJAX를 사용하여 크로스 도메인 요청을 허용하지 않으므로 데스크톱 브라우저에서 시도 할 때 오류가 발생하는 이유가 여기에 있습니다.

기기에서 테스트 중이라면 jQuery가 성공적인 결과를 제공 할 것으로 판단됩니다. 동일한 출처 정책이 적용되지 않는 모바일 장치에서 file : // 프로토콜의 코드를 실행할 때를 볼 수 있습니다. 사실 PhoneGap으로 개발 한 샘플 앱에서 정확한 Google API에 대한 AJAX 쿼리를 수행했습니다.

그러나 사용중인 jQuery의 버전에 따라 버그가있을 수 있습니다. 종종 file : // 프로토콜에서 AJAX 요청을하면 돌아 오는 xhr.status는 '0'이됩니다. 그것은 실제로 괜찮아요 '200'같은 취급해야하지만 이전 버전의 jQuery 0 상태 문제가 있다고 생각합니다.

난 당신이 읽을 수있는 폰갭 응용 프로그램에서 XHR 일을 빠른 블로그 게시물을 작성했습니다 :

http://simonmacdonald.blogspot.com/2011/12/on-third-day-of-phonegapping-getting.html

그것은 방정식에서 완전히 jQuery를합니다. 그것이 작동하지 않는다면 아무 것도하지 않을 것입니다.

+0

그러나 파이어 폭스 테스트를 할 때 file : // 프로토콜을 사용하기 때문에 파이어 폭스에서 요청을 수행 할 수있을 것으로 예상했다. 또한 Firebug 네트워크 페이지에서 요청을 볼 수 있습니다. – ChrLipp

+0

하지만 당신 말이 맞아요. 그것은 장치의 Phongap에서 작동하며 그게 중요합니다. 따라서 Firefox 나 Chrome에서 테스트/디버깅을 할 수는 없지만 디버깅 할 수있는 장치없이 실행해야합니다. – ChrLipp

+1

AJAX의 경우 모바일 브라우저가 데스크톱 브라우저와 다르게 작동하는 것을 수정하십시오. Firefox에서 교차 도메인 아약스를 수행하는 방법에 대한 자세한 내용은 https://developer.mozilla.org/en/HTTP_access_control을 참조하십시오. debug.phonegap.com을 사용하여 장치 또는 에뮬레이터에서 디버깅 할 수 있습니다. –

관련 문제