2

サーバーにいくつかの AJAX リクエストを実装しています。リクエスト タイプとパラメータは 2 つのケースでまったく同じですが、サーバーからのレスポンス タイプは異なります。

ケース 1 :

これは、titanium ネットワーク http クライアントを使用した Titanium での実装です。

var xhr = Ti.Network.createHTTPClient({
    onload : function() {
        alert('sucess');
    },
    onerror : function(e) {
         alert('error');
    },
    timeout : 5000
});
var main_url = "http://localhost:3000/shops/560/login.json?api_token=some_token&customer[phone_number]=9988776655&customer[pin]=9876";
xhr.open('GET', main_url);
xhr.send();

これは完全に応答を返し、私にとってはうまくいっているようです。

ケース 2 :

これは、JQuery AJAX メソッドを使用したローカル ファイルでの実装です。

var main_url = "http://localhost:3000/shops/560/login.json?api_token=some_token&customer[phone_number]=9988776655&customer[pin]=9876";

       $.ajax({
        url: main_url,
        type: "GET",
        dataType: "json",
        timeout: 5000,
        success: function(data, status, xmlstatus) {
            alert("success");
        },
        error: function(data, status, xmlstatus){
            if (t === "timeout") {
                alert("timeout");
            } else {
                alert("some error");
            }
        }
     });

ただし、ブラウザのCROSS DOMAIN ポリシーにより、返されます

 XMLHttpRequest cannot load http://localhost:3000/shops/560/login.json?api_token=some_token&customer[phone_number]=9988776655&customer[pin]=9876. Origin null is not allowed by Access-Control-Allow-Origin.

したがって、これを回避するために、別のパラメーターを追加しました

 &callback = ?

しかし、それでも戻ってきます

 alert('some error');

どこで問題が発生しているのかを把握できません。URL、パラメーター、タイプがすべて同じ場合。

- - - - - - - -編集 - - - - - - -

内部を掘り下げると、応答が得られます。

 console.log(data) => parsererror

 console.log(xmlstatus) => jQuery164023596301255747676_1335786441349 was not called
4

2 に答える 2

1

サーバーはjsonpではなく、単にjsonで応答していると思います。

JSONP の回答は次のようになります。

callback(someJson)

callback は、指定したコールバックの名前、または jquery によって自動的に提供された名前です。JSON クエリ用に作成されたサーバーを JSONP で単純に呼び出すことはできません。

サンプルを次に示します (少し複雑で、実際のコードですが、問題に関係のないものをフィルター処理することになるかもしれません)。

クライアント: https://github.com/Canop/braldop/blob/master/chrome/braldop/inext_com.js

サーバー: https://github.com/Canop/braldop/blob/master/go/src/braldopserver/BraldopServer.go

于 2012-04-30T11:56:49.887 に答える
0

「ローカルファイル」について話しているので、プロトコル file:// でファイルをロードしている場合、ajax で多くのことを実行できないことに注意してください。サーバーが localhost の場合でも、http:// を使用する必要があります。

于 2012-04-30T11:40:54.140 に答える