2011-03-08 73 views
0

我已上载该数据Rackspace的云文件:为什么这个.json文件没有被jquery解析?

{"foo": "bar"} 

它生活在这个网址:http://c192531.r31.cf1.rackcdn.com/test.json

它充当内容类型的应用程序/ JSON和当使用浏览器访问你得到一个Promt下载。该文件具有预期的内容。

当我试图在这个片段中

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

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

}); 
</script> 

它提醒null使用jQuery 1.4.2访问它。

我做错了什么?

回答

5

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

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

1

您正遇到Same Origin Policy。您可以直接下载JSON,因为您不想从另一个网站的上下文中尝试这样做(即,您只是直接访问该URL)。但是从ajax请求中,您有http://site.a尝试从http://site.b加载数据。

1

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

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

1

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