0

現在、マシン上の 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 を手動で作成することで動作させることはできますが)

ありがとう

4

2 に答える 2

0

これを調べたことのある人なら誰でも、問題は IIS Express が私のローカル マシンで使用していたポートであることがわかりました。ポート 80 を介してルーティングするようになったとき、すべてが正常に機能しました。

于 2012-10-12T15:35:45.493 に答える
0
  1. BlueStacks がエミュレーターと同じホスト IP (10.0.2.2) を使用していることは確かですか? よくわからないので答えがわかりません。

  2. jQueryはデータを文字列にしたいので、試してください:

    data: JSON.stringify({'EncryptedPassword':'1234','UserName':'test','DeviceToken':'d234'});
    

    適切な測定のために、追加します

    contentType: 'application/json',
    

    あなたのajax設定で。

于 2012-06-26T19:58:48.497 に答える