我正在尝试使用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)的工作正常吗?
区别是什么?我错过了什么?
谢谢
答案 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