5

古いバージョンの IE のみに影響するように見える $.getJSON 呼び出しで奇妙な問題が発生しました。コードは次のとおりです。

var success = function (response) {
     // do stuff
}

$.getJSON(url, success);

Chrome、Firefox、IE10 では、このコードは問題なく動作します。getJSON は URL (有効であり、クロス ドメインではありません) にヒットし、200 OK を返し、データを返します。これは、期待どおりに成功関数に渡されます。 .

ただし、IE9 以下では、成功のコールバックが呼び出されますが、渡される応答パラメーターは未定義です。IE Dev Tools でネットワーク トラフィックをキャプチャすると、呼び出しが URL にヒットし、200 OK が返され、応答本文で有効な JSON が返されることがわかります。では、成功のコールバックにヒットしたときに、これが未定義として出力されるのはなぜですか?

代わりに適切なパラメーターを使用して $.ajax 呼び出しを使用してみましたが、同じ動作が見られます。以下のコード:

$.ajax({
    dataType: "json",
    url: url,
    success: success
};

jQuery 1.7.2 を使用しています (このページにあるライブラリの 1 つは、新しいバージョンの jQuery では壊れているため、古いバージョンです)。

編集: jQuery 1.10.1 を使用するようにページを更新しようとしましたが、問題は解決しません。

編集 2:返される JSON データが jsonlint.com 経由で有効であることを確認したので、それも問題ではありません。

4

3 に答える 3

1

結果をキャッシュしている場合は、リクエストの前にキャッシュを false に設定します。

$.ajaxSetup({ cache: false });

結果をキャッシュしている場合は、getJSON の代わりに ajax を使用します。

$.ajax({
    url: 'data.json',
    cache: false,
    dataType: 'json',
    success: function(data) {
        console.log('success', data);
    },
    error: function (request, status, error) {
        console.log('error', error);
    }
});

MIME タイプが間違っている場合は、dataType を指定します。

$.getJSON('data.json', 'json', function(data) {
    console.log('getJSON', data);
});

MIME タイプが間違っている場合は、サーバーで dataType を指定します。

header('Content-type: application/json');

変数の競合の場合は、コールバック変数の名前を変更します。

var success = function (newname) {
    console.log('success', newname);
}
$.getJSON(url, success);

クロス オリジン リクエストの場合は、jQuery に強制的に使用させることができます。

$.support.cors = true;
于 2013-10-23T23:51:56.023 に答える