Android 用の PhoneGap アプリを作成しています。(リモート) サーバーからデータを取得するには、jQuery の $.ajax() 関数を使用して REST 呼び出しを行います。知っておくべきことがいくつかあります。
- 呼び出しのタイプは POST でなければなりません
- サーバーは JSON データ (少なくともユーザー名とパスワード) を想定しています。
- サーバーは JSON データを返します
コード:
function makeCall(){
var url = "http://remote/server/rest/call";
var jsonData ='{"username":"'+$('#username').val()+'","password":"'+$('#password').val()+'"}';
$.ajax({
headers: {"Content-Type":"application/json; charset=UTF-8"},
type: "POST",
url: url,
data: jsonData,
dataType: "json",
success: succesFunction,
error: errorFunction
});
}
しかし、これはうまくいきません。Firebug を使用してサーバーの応答を確認すると、何も表示されません。TcpTrace を使用すると、リクエストのヘッダーを確認できます。予想される POST メソッドの代わりに、いくつかの奇妙なヘッダーが追加された OPTIONS メソッドがあります。
OPTIONS /remote/server/rest/call HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: nl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: null
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache
クロスドメインリクエストを行うことに関係があることは知っていますが、問題を解決する方法がわかりません. 私はそれを修正するためにいくつかのことを試みましたが、結果はありませんでした:
- 「json」の代わりに「jsonp」を使用します
- Cross-Origin Resource Sharing (CORS)を使用してみる
この問題は同じオリジン ポリシーにも関係していますが、これは、PhoneGap がローカルの html ファイルをロードするために使用している file:// プロトコルには当てはまりません。
私の AndroidManifest.xml ファイルでは、オプション
<uses-permission android:name="android.permission.INTERNET" />
が設定されています。
これを2日間修正しようとしていますが、今のところ結果はありません。これは可能ですか?先に進むためのヒントはありますか?
前もって感謝します!