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 是唯一有此行问题的浏览器?我知道输入的数据不是空的,因为相同的数据用于在地图上放置对象并且它们显示得很好。

4

2 回答 2

2

我怀疑 eval() 函数没有返回您所期望的。

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

您可以在那里为不支持 JSON 的浏览器找到解析器。

于 2012-08-14T19:44:44.633 回答
1

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

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

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

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

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

于 2012-08-14T19:49:45.660 回答