无法从我的网络服务器读取本地服务器上的 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;
粘贴到我的数据上方?还是我需要定义<head></head>
没有。您需要一个调用 header() 语句(或与您喜欢的语言类似)的 .php 文件,或调整服务器上的 mime-types 以显示 'text/javascript;'使用 .json 文件(因为您的扩展名是 .json)以上是关于无法从我的网络服务器读取本地服务器上的 json 文件的主要内容,如果未能解决你的问题,请参考以下文章