我想在网页上显示外部JSON文件中的数据。
data.json:
{"users":[
{
"firstName":"S",
"lastName":"S",
"joined": {
"month":"January",
"day":12,
"year":2012
}
},
{
"firstName":"S",
"lastName":"P",
"joined": {
"month":"April",
"day":28,
"year":2010
}
}
]}
html代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>JSON Sample</title>
</head>
<body>
<div id="placeholder"></div>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script>
$.getJSON('data.json', function(data) {
var output="<ul>";
for (var i in data.users) {
output+="<li>" + data.users[i].firstName + " " + data.users[i].lastName + "--" + data.users[i].joined.month+"</li>";
}
output+="</ul>";
document.getElementById("placeholder").innerHTML=output;
});
</script>
</body>hello world
</html>
当我在Chrome上运行此代码时,我收到以下错误:
XMLHttpRequest无法加载file:/// C:/Users/.../jsonJquery/data.json。交叉源请求仅支持协议方案:http,数据,chrome,chrome-extension,https,chrome-extension-resource。
但是,相同的代码在Firefox上运行。我无法弄清楚两个不同浏览器上相同代码到底出了什么问题。
在更改html代码以从Web访问文件时,我收到了Cross-Origin错误(这在firefox和chrome上都会发生)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>JSON Sample</title>
</head>
<body>
<div id="placeholder"></div>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script>
$.getJSON('www.someDomain.com/data.json', function(data) {
var output="<ul>";
for (var i in data.users) {
output+="<li>" + data.users[i].firstName + " " + data.users[i].lastName + "--" + data.users[i].joined.month+"</li>";
}
output+="</ul>";
document.getElementById("placeholder").innerHTML=output;
});
</script>
</body>hello world
</html>
我的问题是这些错误的原因是什么?是否有其他方法可以访问远程放置的数据?
更新:JSONP实现工作正常!谢谢!
我想要实现的是动态添加手风琴组(通过从JSON文件中读取)。但我一直收到错误:
&#39;未捕获的TypeError:$(...)。accordion不是函数&#39;
以下是我的代码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<script type="text/javascript" src="external/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="external/jquery.ui.core.min.js"></script>
<script type="text/javascript" src="external/jquery.ui.widget.min.js"></script>
<script>
(function($) {
var url = 'http://www.someDomain.com/data.json?callback=?';
$.ajax({
type: 'GET',
url: url,
async: false,
jsonpCallback: 'jsonCallback',
contentType: "application/json",
dataType: 'jsonp',
success: function(json) {
console.dir(json.sites);
var $bar = $( "#accordion" ).accordion();
$bar.accordion('clearGroups');
$.each(data, function(id, group){
$bar.accordion('addGroup', group);
});
},
error: function(e) {
console.log(e.message);
}
});
})(jQuery);
</script>
<style type="text/css">
.widget
{
width: 300px;
height: 300px;
}
</style>
</head>
<body>
<div id="accordion" class="widget"></div>
</body>
</html>
有人能帮帮我吗?
我确信这一定是一些语法错误,但我无法弄清楚! :(
答案 0 :(得分:1)
使用$.each()
来操纵 json 数据:
$.getJSON('data.json', function(data) {
var output = "<ul>";
$.each(data.users, function(i, item) {
output += '<li>' +
item.firstName + ' ' +
item.lastName + ' ' +
item.joined.month +
'</li>'
});
output += "</ul>";
document.getElementById("placeholder").innerHTML = output;
});
此外,对于跨源错误,请将callback=?
GET 参数添加到$.getJSON
中的网址。
但一般情况下,您必须实施JSONP才能正确完成。
参考:
http://www.w3schools.com/jquery/ajax_getjson.asp
答案 1 :(得分:0)
使用withCredentials
选项进行跨域请求,这有助于避免跨域错误:
$.ajax({
url: "http://www.someDomain.com/data.json",
type: "GET",
dataType: 'json',
xhrFields: {
withCredentials: true
}
}.done(function() {
// your code here
});