无法从我的网络服务器读取本地服务器上的 json 文件

Posted

技术标签:

【中文标题】无法从我的网络服务器读取本地服务器上的 json 文件【英文标题】:Cant read a json file on my local server from my web-server 【发布时间】:2011-11-02 00:44:53 【问题描述】:

所以我在我的网络服务器上有一个名为 array.json 的 json 文件,我打算在本地(现在)我的网络应用程序中读取这个文件,然后在我上线后在另一个域上,我已经创建了这个 json自己归档,这是其中包含的数据。

 "h1": "cmPanel", "h2" : "cmAuto", "h3": 0

当我试图读取文件时,我没有得到回复,这是为什么呢?

这是我读取文件的代码;

$.getJSON('http://www.foobar.com/array.json', function(data)
     alert(data);
 );

我也尝试添加&callback=?,但我仍然没有收到任何信息,请您帮忙!

【问题讨论】:

【参考方案1】:

Quoting official docs:

由于浏览器安全限制,大多数“Ajax”请求都是 遵守同源政策请求不能成功 从不同的域、子域或协议检索数据

脚本和 JSONP 请求的来源不同 政策限制。

More info about Same Origin Policy

To work around it, look into JSONP.

【讨论】:

感谢您提供的信息,现在我如何构建 JSONP 数据,您刚才告诉我的实际问题是什么,我只知道我使用了错误类型的数据结构... @Xavier:您可以通过 JSONP 解决它,查看此处了解更多信息以及如何使用它:en.wikipedia.org/wiki/JSONP【参考方案2】:

为了进行跨域 ajax 调用,您需要使用proxy 或JSONP。由于您已经为 JSON 设置了 JSONP,因此 JSONP 可能是最简单的选择。简而言之,JSONP 需要将您的 JSON 数据包装在一个函数调用中,以便可以以绕过Same Origin Policy 的方式将其传递回调用脚本。

在您的情况下,您可以使用名为“myjsoncallback”的函数包装您的 json 数据,使其看起来像这样:

myjsoncallback("h1": "cmPanel", "h2" : "cmAuto", "h3": 0)

然后将您的 ajax 调用更改为如下所示:

$.ajax(
    url: 'http://www.foobar.com/array.json',
    dataType: 'jsonp',
    jsonpCallback: 'myjsoncallback',                // Specify our callback function name
    success: function(data)  console.log(data); 
);

【讨论】:

你好乔,感谢这段代码到目前为止它似乎正在获取数据我刚刚在控制台Resource interpreted as Script but transferred with MIME type text/plain.收到一个 MIME 类型错误 如果可以,您应该将 MIME 类型设置为 application/javascript【参考方案3】:

您是否可以从您的 Web 应用程序访问服务器? (同源政策)

要使用 jsonp,您不能简单地将回调添加到 json 文件的 URL。服务器应该提供一个返回数据的函数。您可以将此文件包含在默认的 html 脚本标记中,然后执行返回的函数。

【讨论】:

【参考方案4】:

要查看返回的 json,您需要迭代结果

$.getJSON('array.json', function(data)
    var items = [];

   $.each(data, function(key, val) 
      items.push('Key = ' + key + '<br/>Value = ' + val + '<br/><br/>');
   );
   alert(items.join(''));
 );

【讨论】:

【参考方案5】:

array.json 应该使用正确的 Content-Type:text/javascript; charset=utf-8 如果使用回调application/json; charset=utf-8 如果它是普通 json 看这里Best content type to serve JSONP? 避免来自“同源政策”的问题

【讨论】:

嗨 Luis 感谢您的回复,我将如何设置内容类型?我会将content-type=text/javascript; charset=utf-8 放在json 文件的标题中吗? 不起作用,所以只是为了确认我只是将content-type=text/javascript; charset=utf-8;粘贴到我的数据上方?还是我需要定义&lt;head&gt;&lt;/head&gt; 没有。您需要一个调用 header() 语句(或与您喜欢的语言类似)的 .php 文件,或调整服务器上的 mime-types 以显示 'text/javascript;'使用 .json 文件(因为您的扩展名是 .json)

以上是关于无法从我的网络服务器读取本地服务器上的 json 文件的主要内容,如果未能解决你的问题,请参考以下文章

从 Web 服务器上的文本文件中读取文本 [重复]

本地无法访问网站,其他人可以

本地网络上的 Chromecast

无法访问本地网络上的 wamp 服务器

从本地触发远程服务器上的快照

无法读取本地服务器JSON文件, 返回404错误