【问题标题】:Simplest of getJSON call not working最简单的 getJSON 调用不起作用
【发布时间】:2015-06-19 04:09:20
【问题描述】:

似乎无法弄清楚下面的简单 getJSON 调用有什么问题。它在 FF12 中运行良好,但在 IE8 和 Chrome19 中运行良好。

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js">    </script>
<script type="text/javascript">
$(document).ready(function(){
$.getJSON('data.json',function(result){
    alert("success");
});
});
</script>

请注意,以下内容在所有浏览器中都可以正常工作:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js">       </script>
<script type="text/javascript">
$(document).ready(function(){
       alert("success");
});
</script>

显然,getJSON 调用有问题。

有什么想法吗?

谢谢。

更新: 多亏了 samy.vilar,我才能让它工作。以下是我更正的内容:-

  1. 将文件托管到服务器(在本例中为 IIS 7):要发出 AJAX 请求,文件必须托管在服务器上。我试图使用文件系统访问 data.json。

  2. 在 IIS 7 中添加了扩展 .json 的 MIME 类型。

做到了。虽然我仍然想知道当我们无法在没有托管的情况下完成 AJAX 请求时,它在 FF 中是如何工作的。

【问题讨论】:

  • 检查 javascript 控制台,看看您在请求文件时是否有错误。
  • 你的“html文件”的路径是什么,你的“json文件”的路径是什么?
  • @Didier Ghys,没有显示错误。
  • @Op De Cirkel,两者都是本地文件,即不在任何地方托管。
  • 你是如何加载它们的?如果你想发出 ajax 请求,你需要某种服务器。

标签: jquery cross-browser getjson


【解决方案1】:

由于 IIS 默认不支持 json,您可以尝试将 data.json 重命名为 data.html,这样 IIS 不会抱怨 ;) ...只需将 getJSON 更新为 $.getJSON('data.html,...

如果您想启用 .json 文件扩展名,只需按照此说明进行操作。 Open the properties for the server in IIS Manager and click MIME Types
Click "New". Enter "JSON" for the extension and "application/json" for the MIME type.

【讨论】:

  • 成功了!!!非常感谢您的帮助。谢谢 :-)。虽然我仍然想知道当我们无法在没有托管的情况下完成 AJAX 请求时,它在 FF 中是如何工作的?
  • 基本上ajax请求必须使用同一个域,如果你向不同的站点发出ajax请求它会抱怨,为什么?它是一项安全功能,以防止人们将恶意 javascript 代码注入您的网站,FireFox 显然只是查看 URL 是否具有相同的前缀,没问题,谷歌浏览器更进一步并验证其来源和域匹配,file:///...不是一个站点,所以它的来源是NULL,拒绝类似XMLHttpRequest cannot load file:///path/to/your/data.html. Origin null is not allowed by Access-Control-Allow-Origin.
  • 如果您仍然想在本地测试它,请转到 chrome.exe,右键单击,转到属性并将 --allow-file-access-from-files 附加到可执行路径。
【解决方案2】:

这与 D3.js 本地加载 json 数据的问题相同。

D3.js 的补丁可以在这里找到:

https://github.com/jasondavies/d3/commit/95b1eaaf68a1e75e6cf95b88d7e4bbc834b8489d

正在应用的补丁使本地 json 数据正常工作。

我希望这些补丁也可以应用到 jquery-1.7.2

我在使用 jQuery-1.7.2 的 jQtouch b4 上遇到了同样的问题。使用 jQuery-1.3.2 的以前版本的 jQTouch b1 可以正常工作。

【讨论】:

    【解决方案3】:

    如何在 ubuntu 中按照以下说明进行操作? 在 IIS 管理器中打开服务器的属性,然后单击 MIME 类型 点击“新建”。为扩展输入“JSON”,为 MIME 类型输入“application/json”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 2017-12-03
      • 1970-01-01
      • 2011-12-02
      相关资源
      最近更新 更多