現在、マシン上の Android VM (Bluestacks) から IIS Express でホストされている MVC 4 Web API エンド ポイントに ajax ポスト リクエストを作成しようとしています。私が試しているコードのスニペットは次のとおりです。動作しません。
$.ajax({
type: "POST",
url: "http://10.0.2.2:28434/api/devices",
data: {'EncryptedPassword':'1234','UserName':'test','DeviceToken':'d234'}
}).always(function( data, textStatus, jqXHR ) {
alert( textStatus );
});
このリクエストを実行すると、常に「エラー」の textStatus が返されます。さまざまなことを何時間も試した後、End Point を実際のサーバーにプッシュし、次のように XMLHttpRequest を手動で作成した場合、PhoneGap で実際に応答を返すことができました。
var request = new XMLHttpRequest();
request.open("POST", "http://172.16.100.42/MobileRewards/api/devices", true);
request.onreadystatechange = function(){//Call a function when the state changes.
console.log("state = " + request.readyState);
console.log("status = " + request.status);
if (request.readyState == 4) {
if (request.status == 200 || request.status == 0) {
console.log("*" + request.responseText + "*");
}
}
}
request.send("{EncryptedPassword:1234,UserName:test,DeviceToken:d234}");
残念ながら、上記のスニペットの同じエンドポイントに対して $.ajax() を使用しようとすると、「エラー」というステータス テキストが表示されます。参照用のスニペットを次に示します。
$.ajax({
type: "POST",
url: "http://172.16.100.42/MobileRewards/api/devices",
data: {'EncryptedPassword':'1234','UserName':'test','DeviceToken':'d234'}
}).always(function( data, textStatus, jqXHR ) {
alert( textStatus );
});
ここでいくつか質問があります。
1) Android VM が実行されているのと同じマシンで IIS Express を介してホストされている場合、エンドポイントに正常に到達するための ajax 呼び出し (post または get) を取得できないのはなぜですか?
2) エンドポイントが IIS を介して実際のサーバーでホストされ、ポート 80 を介して提供されている場合、jquery の ajax 呼び出しを使用すると、投稿要求が成功しないのはなぜですか? (XMLHttpRequest を手動で作成することで動作させることはできますが)
ありがとう