3

JSONP を使用してサードパーティ (私のサイトとは異なるドメイン) から JSON データをフェッチする Ajax 呼び出しを行っており、Chrome と Firefox で動作していますが、IE では失敗しています (9 と 10 は私が試したバージョンです)。IE デバッガーでは、呼び出しが (Http 200 で) 完了していることがわかりますが、JSONP 呼び出しに指定したコールバックが呼び出されていません。

私のコードは次のようになります。

$.ajax({
    url: 'http://api.yipit.com/v1/deals/?key=mykey&division=seattle&limit=1000',
    dataType: 'jsonp',
    contentType: "text/javascript",
    async: false,
    cache: false,
    crossDomain: true,
    jsonp: 'callback',
    jsonpCallback: 'processResult',
    error: function (xhr, textStatus, error) {
        window.alert(error);
    },
    success: function (data) {
        window.alert(JSON.stringify(data));
        _yipit_deals = data.response.deals;
    }
});

応答本文は次のようになります。

<html><body><pre>processResult({
... [valid JSON data]
});</pre></body></html>

呼び出しが行われると、エラー関数が次のエラーで呼び出されError: processResult was not called、IE デバッガーは<html><body><pre>、応答内のタグを解析しようとしたときに発生したスクリプト エラーを表示します。Chrome と Firefox で実行している場合、これらの html タグは応答本文に存在せず、IE の場合に応答が異なる理由がわかりません。

これらのタグが原因で IE が barf し、コールバックを呼び出せなくなっているようです。「text/html」、「text」、「application/javascript」などの contentType に他の値を指定してみましたが、まったく指定しませんでしたが、違いはありませんでした。クロスドメインの問題を回避するために JSONP を使用しています。

何か案は?ありがとう!

4

1 に答える 1

1

formatURL に明示的な引数を渡す必要があります。

&format=json

それ以外の場合は、出力をきれいに印刷するだけです。

<html><body><pre>{
    "meta": {
        "code": 401,
        "message": "Key not recognized",
        "name": "AuthenticationFailed"
    },
    "response": {}
}</pre></body></html>

また、私は にasync戻りtrueます。

于 2013-05-20T23:25:01.850 に答える