为什么这个.json文件没有被jquery解析?

时间:2011-03-08 16:47:27

标签: jquery json http

我已将此数据上传到rackspace云文件:

{"foo": "bar"}

它位于此网址:http://c192531.r31.cf1.rackcdn.com/test.json

它被用作Content-Type application / json,当用浏览器访问时,你会得到一个下载的promt。该文件具有预期的内容。

当我尝试使用带有此代码段的jquery 1.4.2访问它时

<script>
$(document).ready(function($) {

    url = 'http://c192531.r31.cf1.rackcdn.com/test.json';
    $.getJSON(url, function (data) {
        alert( data );
    });

});
</script>

它提醒null

我做错了什么?

4 个答案:

答案 0 :(得分:5)

包含此脚本的页面是否托管在同一个域(http://c192531.r31.cf1.rackcdn.com)上?如果不是,您可能会点击same origin policy restriction,这会阻止您发送跨域AJAX请求。

可能的解决方法是使用JSONP,但是您需要使远程URL返回JSONP字符串,或者如果您无法修改它,请设置服务器端脚本,该脚本将充当您的域和域之间的桥梁。远程域,然后将AJAX请求发送到此桥脚本。

答案 1 :(得分:1)

你正在遇到Same Origin Policy。您可以直接下载JSON,因为您没有尝试从其他站点的上下文中执行此操作(即,您只是直接访问URL)。但是,在ajax请求中,您http://site.a尝试从http://site.b加载数据。

答案 2 :(得分:1)

这是由于安全重建造成的。解决这个问题的方法是使用jsonp而不是json。

在jquery中,您可以通过将内容类型设置为jsonp来利用jsonp。但是你需要更改你的json文件。

答案 3 :(得分:1)

您无法请求与该页面不在同一域中的JSON文件。这称为same origin policy。您可以使用JSONP