1

すべてのブラウザで、Safari、Firefox、Chrome、IE9を意味します。

IE8のコンソールで発生するエラーは次のとおりです。

'data.cities[...].country' is null or not an object

()の下にある374行目var country = k.data.cities[i].country;

downloadUrl(url, function(data) {
    var k = eval("(" + data.responseText + ")"); 
    var klength = k.data.cities.length;
    var countries = [];

    for(i=0; i < klength; i++) {
        var country = k.data.cities[i].country;
        countries.push(country);
    }

    countries = $.unique(countries);

    var countryLength = countries.length;

    for(i=0; i < countryLength; i++) {
        $('.ribbon').append('<a href="#" class="country '+ countries[i] +'">' + countries[i] + '</a>');
    }
});

この行で問題が発生しているブラウザがIE8だけなのはなぜですか?同じデータがオブジェクトをマップ上に配置するために使用され、それらが適切に表示されるため、フィードされるデータがnullではないことを私は知っています。

4

2 に答える 2

2

eval()関数が期待どおりの結果を返さないのではないかと思います。

代わりにJSON.parseを使用してみてください。

JSONをネイティブでサポートしていないブラウザー用のパーサーを見つけることができます。

于 2012-08-14T19:44:44.633 に答える
1

問題はおそらく、data.responseTextどこかに末尾のコンマがある可能性があることです。

[
    "A", "B", "C",
]

これはInternetExplorerでは機能せず、有効なJSONでもありません。他のすべてのブラウザは、末尾のコンマに対応しています。

修正:AJAXエンドポイントを変更して、末尾のコンマをすべて省略します。

さらに良い修正:JSON.parse無効なJSONに対して爆弾を送信するを使用して、すべてのブラウザーが失敗しても同じように動作するようにします。

于 2012-08-14T19:49:45.660 に答える