我试图跨域使用jQuery getJSON方法提取数据。我在这里设置了一个关于JS FIDDLE的测试:
我真的不知道为什么这不起作用。如果我在同一个域上传此文件或在本地使用feeTest.html,则代码可以正常工作。
但是,如果我上传或使用真正意图的网址,Feed就无法使用。
此外,如果我在相同的域中使用.ajax,它的工作原理。但我的理解是.ajax不能跨不同的域工作,这就是.getJSON的用途。
感谢您的帮助!
答案 0 :(得分:3)
$.getJSON
无法解析same origin policy restriction,但JSONP会解析{{3}}。但是,这要求服务器发送回包装json数据的回调。
答案 1 :(得分:0)
.getJSON()
是具有预配置选项的.ajax()
的简写。请参阅documentation。
URL中的数据采用JSON格式,跨域不支持。它们需要以JSONP格式返回,这意味着它们必须能够将数据放入指定的回调函数中。
您必须修改服务以使用JSONP并允许您指定回调参数或使用其他方式来访问服务。
使用YQL访问您的数据的示例:
$.ajax({
url: 'http://query.yahooapis.com/v1/public/yql',
data: {
q: 'select * from json where url="http://www.corporatereport.com/SampleSites/rockwellCollins/mockup5/feedTest.html"',
format: 'json'
},
dataType: 'JSONP',
success: function(data) {
// this is the XML in JSON format
console.log(data.query.results.json.news);
// example - display list of titles
var titles = $.map(data.query.results.json.news, function(news) {
return '<li>' + news.t + '</li>';
});
$('<ul />', { html: titles.join('') }).appendTo('body');
}
});
HERE 是代码。
答案 2 :(得分:0)
在这种情况下,您可以访问两个可以控制的不同域,并且您必须进行跨域调用。所以,这种情况是你无法避免它,你无法控制以JSONP格式返回数据。
var script = document.createElement('script');
script.type = "text/javascript";
script.src='path to crossdomain source.js';
document.getElementsByTagName("head")[0].appendChild(script);
lookupInterval = setInterval("function_to_call()", 1000);
var lookupCounter=0;
function function_to_call(){
//give up after 5 times
if(++lookupCounter == 5)
return clearInterval(lookupInterval);
try{
var cities = GEO_DATA_2011_11_28.cities.city;
//since we found our data, let's clean the interval call
return clearInterval(lookupInterval)
}
catch(e){
//do nothing, we are actually controlling the situation with the if condition at the beginning
}
}
我们将远程js文件中的数据定义为JSON格式的var GEO_DATA_2011_11_28 = {}。这里的技巧是我们动态地将脚本文件注入HTML的头部。由于脚本块可以毫无问题地加载跨域脚本,因此我们可以以延迟方式执行此操作。考虑到加载脚本可能会有延迟,我们正在调用一个函数来检查我们想要获取的数据。
此解决方案是必要的,因为无法在JSONP中发送数据,因此我们依赖于读取简单的js文件。
答案 3 :(得分:0)
HY,
这违反了相同的原产地政策,通常是不允许的。
无论如何,有一个使用Yahoo Query Language YQL的jQuery插件。到目前为止,我在我的项目中使用它并且工作正常。
这是教程http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/