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

时间:2010-07-08 14:39:16

标签: ajax json cross-domain

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

$("#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 个答案:

答案 0 :(得分:0)

您从YQL返回的结果是JSON格式,允许这样的跨站点AJAX调用。它的机制相同,允许您通过JSON(即Twitter API)与外部站点的Web服务进行通信。

此处的详细信息 - http://www.wait-till-i.com/2010/01/10/loading-external-content-with-ajax-using-jquery-and-yql/

答案 1 :(得分:0)

您可以在外部网站上制作JSON:

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

并定义

function callback(json) {
   ..here is processing..
}

答案 2 :(得分:0)

感谢您的回答,但不幸的是,他们都不回答我的原始问题。

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

第一个代码片段使用AJAX / JSON来检索数据,并且由于同源策略而允许使用它。但是对YQL的请求改为使用JSONP,这没关系。

JSONP是我不知道的事情,这就是为什么我没有动摇这种行为。

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