代码之家  ›  专栏  ›  技术社区  ›  Alexander Beletsky

来自客户端脚本的跨域内容使用(安全问题)

  •  1
  • Alexander Beletsky  · 技术社区  · 15 年前

    我正在尝试使用jquery加载函数在我的页面上加载一些外部内容。对于本地内容,加载方法可以正常工作,但是如果您想从您的域中得到一些东西,它将无法工作。

    $("#result").load("http://extrnal.com/page.htm #data);
    

    (它实际上在IE中使用了安全警告,但完全拒绝在Chrome中使用)。jquery文档说它是正确的,因为跨域内容由于安全原因受到限制。如果使用.getjson方法,我会得到同样的警告。

    好吧,在谷歌搜索了一下之后,我发现使用YQL加载内容的方法非常有趣,我尝试了一些示例,如:

            var request = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Ffinance.yahoo.com%2Fq%3Fs%3Dyhoo%22&format=json&diagnostics=true&callback=?";
            $.getJSON(request, function (json) {
                alert(json);
            }
           );
    

    它真的很管用!

    我现在不明白的是 http://query.yahooapis.com 还有跨域资源,但浏览器(IE和Chrome)都可以用吗?

    有什么区别?我错过了什么?

    谢谢你

    3 回复  |  直到 15 年前
        1
  •  0
  •   HurnsMobile    15 年前

    从YQL得到的结果是JSON格式的,这对于像这样的跨站点Ajax调用是允许的。它与允许您通过JSON(即TwitterAPI)与外部站点的Web服务通信的机制相同。

    细节在这里- http://www.wait-till-i.com/2010/01/10/loading-external-content-with-ajax-using-jquery-and-yql/

        2
  •  0
  •   Андрей Костенко    15 年前

    您可以这样在外部站点上进行JSON:

    callback({key:value,etc:1})
    

    并定义

    function callback(json) {
       ..here is processing..
    }
    
        3
  •  0
  •   Alexander Beletsky    15 年前

    谢谢你的回答,但不幸的是他们都没有回答我的原始问题。

    我已经检查了StackOverflow的相关问题(我知道我需要先做这个),并找到了这种行为的原因。

    第一个代码截图使用ajax/json来检索数据,并且由于相同的源策略,它是允许的。但是对YQL的请求使用JSONP,这是可以的。

    JSONP是我不知道的东西,这就是为什么我没有取消对行为的约束。

    有关jsonp的介绍信息可以在这里找到: http://ajaxian.com/archives/jsonp-json-with-padding