我已将此数据上传到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
。
我做错了什么?
答案 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。