jquery:Ajax Json简单渲染

时间:2012-02-21 00:55:04

标签: json jquery jquery-mobile

我正在试用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');
    });

1 个答案:

答案 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来调用您自己的服务器端点(相同的服务器=不违反相同的源策略)。