Javascript XMLHttpRequest for JSON文件在Chrome中工作得很好,但在Firefox中却不行
我已将问题范围缩小到下面的函数。这是我正在编写的用户脚本的一部分。它在Chrome中工作得非常好,但在Firefox/Greasemonkey中根本不起作用。我一整天都在摆弄它,结果碰上了一堵砖墙。唯一有意义的是如果JSON.parse工作不正常,这是有意义的,因为众所周知Chrome处理JSON.parse的方式有些不同。。。但我知道JSON的格式是完美的Javascript XMLHttpRequest for JSON文件在Chrome中工作得很好,但在Firefox中却不行,javascript,json,firefox,google-chrome,userscripts,Javascript,Json,Firefox,Google Chrome,Userscripts,我已将问题范围缩小到下面的函数。这是我正在编写的用户脚本的一部分。它在Chrome中工作得非常好,但在Firefox/Greasemonkey中根本不起作用。我一整天都在摆弄它,结果碰上了一堵砖墙。唯一有意义的是如果JSON.parse工作不正常,这是有意义的,因为众所周知Chrome处理JSON.parse的方式有些不同。。。但我知道JSON的格式是完美的 function getTagline() { var jsonfile = new XMLHttpRequest();
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);
}
有什么想法吗?有人告诉我,如果没有额外的库,就不支持JSON,请参阅公认的答案。我也试过这个
try {
clientList = JSON.parse(responseText);
} catch (e) {
alert(e.message);
}
我得到的信息是“JSON未定义”。因此,答案似乎是正确的。经过更多的故障排除,原来是跨域XHR问题。它在Chrome中工作,因为默认情况下,Chrome允许在所有域上使用该脚本。我调整了标题,使Chrome知道只允许正确的域,但Firefox不允许XHR上的跨域。这是通过简单地切换到GM_xmlhttpRequest来解决的,它允许Firefox中的跨域,谢天谢地,Chrome也支持它
谢谢你们的帮助,伙计们 您可以发布您试图解析的JSON的一部分吗?以下是一个示例:[{“commenturl”:[“/107669/Solutionism是新的乐观主义”#3934686“],“metais”:[“Metafilter:休息了一天,坐在地下室,在黑暗中,根本没有任何反应],“user”:[“不可思议的亨格曼”],{“commenturl”:[“/107126/Lancelot Link Secret Chimp#3905976”],“metais”:[“Metafilter:他们不是猴子,他们是书呆子。”],“user”:[“Daddy-O”],{“commenturl”:[“/107129/我的工作是看着梦想消亡#3906426”],“metais”:[“Metafilter:大多数可怕的人躲在好链接后面”],“user”:[“屁股的隐隐”]因此,这是一个对象列表。根据JSON.org,它应该是有效的。我认为…:PWorks对我来说很好,但必须避开Firebug(\')中的单引号。那个脚本到达JSON.parse行了吗?如果是,那个调用会抛出,如果是,会出现什么异常?谢谢!我明天会尝试一下。让我觉得它是受支持的,不过…我会在尝试后再次评论。嗯,看起来不是这样的…切换到使用eval进行测试。它在Chrome中仍然可以正常工作,使用eval,b但在Firefox中是不行的。