2013-07-22 98 views
1

我想用pure.js显示json数据。它适用于json在页面中正确编码的情况,但当我尝试从我的url中获取实际的json时,它不起作用。请帮我通过我的网址连接到现场的json。渲染远程json

my URL

my fiddle

<script src="http://beebole.com/pure_git/libs/pure.js"></script> 

<p>Item: <span id="item" class="item"></span></p> 
<p>Count: <span id="count" class="count"></span></p> 
<p>Group: <span id="group" class="group"></span></p> 

// Hard coded - works 
var data = {"item":"chm","count":1,"group":"truthsponsors"} 

$.getJSON('http://arbitrarycounter.com/vb/truthsponsors/chm/', function(data) { 
    // My attempt to retrieve the live json - doesn't work 
}); 

$('#item').autoRender(data); 
$('#count').autoRender(data); 
$('#group').autoRender(data); 

*跨起源共享已在服务器上启用。

+4

“纯”是图书馆最讨厌的名字:) –

+2

一方面,你必须移动有访问数据*成* Ajax回调。另一方面,如果页面不是从同一个域中提供的,而是尝试从中访问数据,那么您可能会受到相同的源策略(例如jsFiddle演示)的影响。 –

+1

可能的重复[方法规避同源政策](http://stackoverflow.com/questions/3076414/ways-to-circumvent-the-same-origin-policy) – Quentin

回答

1

费利克斯和昆汀评价的是准确的。您遇到了同源策略问题。

?callback=?添加到您要提取的网址的末尾。 ?将被替换为内部jQuery回调函数的名称。让后端脚本使用回调参数的值与返回数据进行函数调用。然后,您可以在成功处理函数中访问该数据。

例子:

$.getJSON('http://arbitrarycounter.com/vb/truthsponsors/chm/?callback=?', function(data) { 
    // My attempt to retrieve the live json - doesn't work 
    console.log(data); 
}); 

如果回调设置为json1341254215,那么你应该返回:

json1341254215({"item":"chm","count":1,"group":"truthsponsors"}); 

而且,不要忘记你的后端顶部设置内容类型脚本:

header('Content-type: application/'.(strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' ? 'json' : 'javascript')); 
1

启用CORS后,您可以轻松获得数据。 请参阅:http://enable-cors.org/

<script src="http://beebole.com/pure_git/libs/pure.js"></script> 

<p>Item: <span id="item" class="item"></span></p> 
<p>Count: <span id="count" class="count"></span></p> 
<p>Group: <span id="group" class="group"></span></p> 

$.getJSON('http://arbitrarycounter.com/vb/truthsponsors/chm/', function(data) { 
    $('#item').autoRender(data); 
    $('#count').autoRender(data); 
    $('#group').autoRender(data); 
}); 

Updated Fiddle