我正在试用jQuery 1.6.4 with mobile来获取一个简单的json feed并将其显示为学习练习。我无法在getJSON中获取回调。 json feed是开放和公开的,所以没关系。这可能是一个jQuery 1.6.4 +移动问题吗?
$.getJSON('https://raw.github.com/currencybot/open-exchange-rates/master/latest.json',
function (data) {
var items = [];
$.each(data, function (key, val) {
items.push('<li id="' + key + '">' + val + '</li>');
});
$('<ul/>', {
'class': 'my-new-list',
html: items.join('')
}).appendTo('body');
});
答案 0 :(得分:3)
您无法对此网址发出AJAX请求,因为它会违反相同的原始政策。有关说明,请参阅http://e-mats.org/2010/01/jquery-getjson-and-the-same-origin-policy/。这是一个引用:
使用外部来源的数据创建简单的混搭时,您 通常希望以合适的格式读取数据 - 例如JSON。该 工作的工具往往是javascript,运行在你最喜欢的 浏览器。唯一的问题是使用XHR进行的请求 (XMLHttpRequest)必须遵循相同的原始策略,这意味着 请求不能用于生活在其他主机上的资源 服务于原始请求的主持人。
为了解决这个问题,客户通常使用JSONP - 或简单 修改通常的JSON输出。数据仍然是JSON,但是 输出还包括请求结束时的简单回调, 在本地浏览器中触发javascript。这种方式的创造者 数据实际上告诉浏览器(以这么多hacky方式)它是 好吧,我实际上是想过这个。帮助自己。
基本上,常规AJAX使用XMLHtmlRequest,它具有相同的域安全策略。另一方面,JSONP插入一个运行回调函数的脚本标记(没有同域原始策略)。但是终端服务器必须支持这一点,因为它负责使用回调函数实际生成脚本。
如果服务器支持JSONP,您可以通过将callback=?
添加到使用getJSON调用的URL中的请求参数来执行此操作。但它看起来不像这个端点支持JSONP(添加callback=?
什么都不做)。
因此,您可能必须在服务器上创建代理端点才能访问此数据。基本上,在您自己的服务器上创建一个端点,使用任何有意义的方法(curl等)加载该数据并按原样返回它。然后,您可以使用常规AJAX来调用您自己的服务器端点(相同的服务器=不违反相同的源策略)。