2012-01-19 13 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!'); 
     } 
    }); 
} 

ステータスが「エラー」、xhr.readyState = 0、xhr.status = 0であるので、私は全くのjQueryの理由ですべての情報を得ることはありません。要求は実行され、応答ヘッダ(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()はtrueを返します。これは何を意味するのでしょうか?

+0

の代わりにXMLを試してみてください。JSONP –

+2

クロスドメインの発信元の制限のために(実際のリクエストで、プロキシスクリプトなしで)テストすることはできません。このAPIはJSONPをサポートしていないようです。しかし、それはクロスドメインの存在がないので、デバイス上のPhonegapの内部で動作する予定です。 – dfsq

+0

@dfsg:あなたのコメントが回答だったら、私はそれを選択したでしょう。ありがとうございました! – ChrLipp

答えて

7

さて、ここでは多くのことが行われています。まずFirefoxは、AJAXを使用してクロスドメイン要求を行うことを許可していないため、デスクトップブラウザから試してみるとエラーが発生します。

デバイスでテストしていた場合は、jQueryがうまくいくと思います。モバイルデバイス上のfile://プロトコルからコードを実行すると、同じ発信元ポリシーは適用されません。実際、私はPhoneGapで開発したサンプルアプリケーションで、正確なGoogle APIにAJAXクエリを実行しました。

しかし、使用しているjQueryのバージョンによってはバグがある可能性があります。 file://プロトコルからAJAXリクエストを行うと、xhr.statusは '0'に戻ります。それは実際には大丈夫ですし、 '200'と同じように扱われるべきですが、私は古いバージョンのjQueryが0の状態で問題があると思います。

私はあなたが読むことができるのPhoneGapアプリケーションからXHRを行う上で迅速なブログ記事を書いた:

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

それは方程式から完全にjQueryをとります。それが動作しない場合、何もしません。

+0

しかし、私はFirefoxテストを行うときにも私はfile://プロトコルを使うので、Firefoxが私に要求を実行することを期待しました。また、Firebugネットワークページのリクエストも表示されます。 – ChrLipp

+0

しかし、あなたは正しいです。それはデバイス上のPhongapで動作し、それは重要です。だから、FirefoxやChromeでテスト/デバッグすることはできませんが、デバッグすることなくデバイス上で実行する必要があります。 – ChrLipp

+1

AJAXの場合、モバイルブラウザはデスクトップブラウザとは異なる動作をします。 Firefoxでクロスドメインajaxを実行する方法については、https://developer.mozilla.org/en/HTTP_access_controlをご覧ください。 debug.phonegap.comを使用してデバイスまたはエミュレータでのデバッグを行うことができます。 –

関連する問題