【问题标题】:$.getJSON() works in IE9, but not in Chrome and FireFox, whats wrong in my code?$.getJSON() 在 IE9 中有效,但在 Chrome 和 FireFox 中无效,我的代码有什么问题?
【发布时间】:2012-01-12 09:10:15
【问题描述】:

我使用 IE9 和文本编辑器开发了一个 Web 应用程序。它读取一个 JSON 文件,然后根据该文件以及 JavaScript 和 jQuery 代码的逻辑填充一些 DIV 元素。在IE9下,完美运行。

在 Chrome 下,$.getJSON() 语句执行失败,所以没有数据可用。在 FireFox 下,$.getJSON() 语句显然在运行(警报消息证明了这一点),但它没有读取任何内容。

JSON 文件通过 JSONLint。

Chrome 和 FireFox 均未显示任何错误。

我使用来自 JSON 站点的 JSON 数据创建了一个示例文件,通过 JSONLint 对其进行了验证,然后使用该文件运行了我的代码。没有区别——Chrome 仍然会忽略 $.getJSON() 语句。

我的代码的相关部分:

    function buildTree(centralID) {
      alert("Can we start, at least?");
     $.getJSON('sample.json', function(data) {
      alert("first success");
      $.each(data.person, function(i, xdata) {

Chrome 显示第一个警报,但不显示第二个。

有什么想法吗?

【问题讨论】:

    标签: javascript jquery json cross-browser jsonlint


    【解决方案1】:

    这是在网络服务器上运行还是只是在浏览器中打开文件?如果你只是打开文件,你会遇到问题。

    【讨论】:

    • 哇,我不知道。但是在我的开发机器上使用 localhost 并没有改变任何东西。这里的理论是什么?
    • 你可以通过 Ajax 访问的规则是不同的,不太确定它们是什么,我总是在 WA Web 服务器上运行所有内容。
    • 我现在记得,当我几周前去研究类似的东西时,我在 Chrome 网站上发现了关于 Chrome 在禁止“本地访问”方面是否正确的争议证据。当时我还有其他问题,所以很快就忘记了。我认为,正如您可能建议的那样,如果我将所有内容移动到服务器(从我的开发机器的 IIS),它应该可以工作。
    【解决方案2】:

    您可以使用内置的错误功能来显示错误并进行调试。

    $(document).ready(function(){ // Make sure your jQuery is inside this
    $.getJSON("sample.json", function(data) {
        alert('Point 1 Reached.');
        console.log(data); // Here we log to our console
        $.each(data.feed.entry, function(i, item) {
                 // Do your stuff here
            }); // End of $.each
    
    // Here Success, Completed & Error do something. chained onto $.getJSON
            }).success(function() { alert("success"); })
              .error(function(jqXHR, textStatus, errorThrown) { // Debug the error!!
                        console.log("error " + textStatus);
                        console.log("error throw " + errorThrown);
                        console.log("incoming Text " + jqXHR.responseText);
                    }) // End of .error
              .complete(function() { alert("complete"); });
            });
    }); // End of DOM Ready
    

    这应该会在 firefox 或 chrome 的控制台窗口中显示错误(console.log 在 IE 中不起作用并破坏脚本)。要在 Firefox 或 chrome 中调出控制台窗口,请按F12。如果 JSON 不工作,它会显示一个您可以调试的错误。


    更新
    还要确保此代码在您的$(document).ready() 中。如果以其他方式使用 $.getJSON() 可能会导致跨浏览器出现意外行为。

    【讨论】:

    • 我认为这可以做到。我需要非常小心地拆开它,但我已经在控制台日志上看到 Chrome(至少)无法“找到”JSON 文件(它就在同一个文件夹中)。这解释了为什么它不打开它,即使它不能打开它。感谢您指出这一点并澄清扩展的 $.getJSON() 语法。文档显示了这种扩展语法,但我不清楚如何放置自己的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多