XMLHttpRequest for JSON文件在Chrome中完美运行,但在Firefox中无法运行

时间:2011-09-24 23:10:52

标签: javascript json firefox google-chrome userscripts

我已将问题区域缩小到以下功能。这是我写的用户脚本的一部分。它在Chrome中完美运行,但在Firefox / Greasemonkey中根本不起作用。我整天都在修补它并撞到了一堵砖墙。唯一有意义的是,如果JSON.parse不能正常工作,这是有道理的,因为已知Chrome处理JSON.parse有点不同......但我知道JSON完美形成了!

function getTagline() {
    var jsonfile = new XMLHttpRequest();
    jsonfile.open("GET", "http://example.com/somegood.json", true);
    jsonfile.onreadystatechange = function() {
        if (jsonfile.readyState == 4) {
            if (jsonfile.status == 200) {
                var taglines = JSON.parse(jsonfile.responseText);
                var choose = Math.floor(Math.random() * taglines.length);
                var tagline = document.createTextNode(taglines[choose].metais);
                insertTagline(tagline);
            }
        }
    };
    jsonfile.send(null);
}

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

有人告诉我,没有额外的库就不支持JSON,请参阅here接受的答案。我也试过这个

try {
    clientList = JSON.parse(responseText);
} catch (e) {
    alert(e.message);
}

我收到的消息是“JSON未定义”。所以答案似乎是正确的。

答案 1 :(得分:1)

经过一些更多的故障排除后,结果证明这是一个跨域XHR问题。它在Chrome中正常运行,因为默认情况下,Chrome允许所有域上的脚本。我调整了标题,以便Chrome知道只允许正确的域名,但Firefox不允许在XHR上禁用跨域。这只是通过简单地切换到GM_xmlhttpRequest来修复,这允许在Firefox中使用跨域,并且谢天谢地,Chrome也支持。

感谢帮助,伙计们!