【问题标题】:XMLHttpRequest for JSON file works perfectly in Chrome, but not in FirefoxJSON 文件的 XMLHttpRequest 在 Chrome 中完美运行,但在 Firefox 中无法运行
【发布时间】:2011-11-24 10:42:52
【问题描述】:

我已将问题范围缩小到以下功能。这是我正在编写的用户脚本的一部分。它在 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);
}

有什么想法吗?

【问题讨论】:

  • 您能发布您尝试解析的 JSON 的一部分吗?
  • 这里是一个例子:[{"commenturl": ["/107669/Solutionism-is-the-new-Optimism#3934686"], "metais": ["Metafilter: 请了一天假在黑暗中坐在地下室,根本没有真正回应任何事情"], "user": ["uncanny hengeman"]},{"commenturl": ["/107126/Lancelot-Link-Secret-Chimp# 3905976"], "metais": ["Metafilter: 他们不是猴子。他们是学究。"], "user": ["Daddy-O"]}, {"commenturl": ["/107129/My -job-is-to-watch-dreams-die#3906426"], "metais": ["MetaFilter: 大多数可怕的人都躲在好的链接后面"], "user": ["Faint of Butt"]}]跨度>
  • 所以,它是一个对象列表。根据 JSON.org,它应该是有效的。我认为...:P
  • 对我来说很好,但必须转义 Firebug (\') 中的单引号。 o7.no/nJ2nJA
  • 该脚本是否到达 JSON.parse 行?如果是,该调用会抛出什么异常,如果是,是什么异常?

标签: javascript json firefox google-chrome userscripts


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!我明天试试。 This article 让我觉得它是受支持的,不过……我会在尝试后再次发表评论。
  • 嗯,看起来不是这样...切换到使用 eval 对该行进行测试。它在 Chrome 中仍然可以正常工作,使用 eval,但在 Firefox 中不行。
【解决方案2】:

经过更多故障排除后,事实证明这是一个跨域 XHR 问题。它在 Chrome 中运行,因为默认情况下,Chrome 允许所有域上的脚本。我调整了标头,以便 Chrome 知道只允许正确的域,但 Firefox 无论如何都不允许 XHR 上的跨域。只需切换到 GM_xmlhttpRequest 即可解决此问题,它允许 Firefox 中的跨域,幸运的是,Chrome 也支持。

谢谢大家的帮助!

【讨论】:

    猜你喜欢
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 2017-12-10
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多