我的javascript适用于IE8的每个浏览器

时间:2012-08-14 19:40:49

标签: javascript html json internet-explorer-8

每个浏览器都是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会成为唯一一个遇到此问题的浏览器?我知道正在馈送的数据不是空的,因为相同的数据用于在地图上放置对象并且它们显示得很好。

2 个答案:

答案 0 :(得分:2)

我怀疑eval()函数没有返回你期望的结果。

您可能想尝试使用JSON.parse。

您可以为没有JSON原生支持的浏览器找到解析器there

答案 1 :(得分:1)

问题很可能是data.responseText可能在某处有一个尾随逗号。

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

这不适用于Internet Explorer,也不是有效的JSON。所有其他浏览器都会处理尾随逗号。

修复:更改您的AJAX结束点以省略所有尾随逗号。

更好的解决方法:使用JSON.parse炸弹无效的JSON,以便所有浏览器都失败时表现相同。