在不使用jQuery的情况下解析json,并在HTML代码中添加值
Parse a json without jQuery and add the value in HTML code
首先:我不想使用jQuery。
我想找到一种方法来解析这种类型的json,并将其文本添加到特殊标签中:
{
"datas": {
"General": [
{
"id": "hotel_name",
"value": "My Hotel name"
},
{
"id": "hotel_description",
"value": "Lorem ipsum dolor..."
}
],
"Photos": [
{
"id": "photo1",
"value": "house.png"
},
{
"id": "photo2",
"value": "house.png"
}
]
}
}
在HTML上,我有一个特殊的标签:
<mytag id="hotel_name"></mytag>
必须成为:
<mytag id="hotel_name">My Hotel name</mytag>
我试过这个:
function createElements(elements) {
elements = JSON.parse(elements);
elements.forEach(funciton (element) {
var div = document.getElementById(element.id);
div.innerHTML = element.text;
});
}
var request = new XMLHttpRequest();
request.onload = createElements;
request.open("get", "datas.json", true);
request.send();
但它并没有像我想要的那样工作。
你有线索吗?
谢谢。
我想你的意思是:
elements.datas.General.forEach(function (element) {
var div = document.getElementById(element.id);
div.innerHTML = element.text;
});
在循环数组之前,必须解析每个JSON属性。
编辑、更新
注意,text
不作为对象的属性出现在datas.General
、datas.Photos
数组中;参见element.text
。出现名为id
、value
的属性;即element.id
、element.value
。
要筛选单个属性名称,请尝试
function createElements(elements) {
if (elements.target.readyState === 4) {
var elems = elements.target.response;
var keys = Object.keys(elems.datas).filter(function(name) {
return name === "General"
});
keys.forEach(function (element, i) {
var el = elems.datas[element];
el.forEach(function(key, i) {
var div = document.getElementById(key.id);
div.innerHTML = key.value;
})
});
}
};
var request = new XMLHttpRequest();
request.onload = createElements;
request.responseType = "json";
request.open("GET", "datas.json", true);
request.send();
jsfiddlehttp://jsfiddle.net/k2f7b3mp/
要筛选多个属性名称,请尝试
function createElements(elements) {
if (elements.target.readyState === 4) {
var elems = elements.target.response;
var keys = Object.keys(elems.datas).filter(function(name) {
return name === "General" || name === "Color"
});
console.log(keys, 1)
keys.forEach(function (element, i) {
var el = elems.datas[element];
el.forEach(function(key, i) {
console.log(key, i);
if (document.getElementById(key.id)) {
var div = document.getElementById(key.id);
div.innerHTML = key.value;
}
})
});
}
};
http://jsfiddle.net/b6n8q1d1/2/
您需要访问对象的每个属性
elements.datas.General.forEach(function (element) {
var div = document.getElementById(element.id);
div.innerHTML = element.value;
});
工作演示:
var myJSONtext = " {'"datas'": { '"General'": [ { '"id'": '"hotel_name'", '"value'": '"My Hotel name'" }, { '"id'": '"hotel_description'", '"value'": '"Lorem ipsum dolor...'" } ], '"Photos'": [ { '"id'": '"photo1'", '"value'": '"house.png'" }, { '"id'": '"photo2'", '"value'": '"house.png'" } ] }}";
var elements = JSON.parse(" {'"datas'": { '"General'": [ { '"id'": '"hotel_name'", '"value'": '"My Hotel name'" }, { '"id'": '"hotel_description'", '"value'": '"Lorem ipsum dolor...'" } ], '"Photos'": [ { '"id'": '"photo1'", '"value'": '"house.png'" }, { '"id'": '"photo2'", '"value'": '"house.png'" } ] }}");
elements.datas.General.forEach(function (element) {
var div = document.getElementById(element.id);
div.innerHTML = element.value;
});
<div id="hotel_name"></div>
jsfiddle上的相同演示:http://jsfiddle.net/wzu29pau/
poipoi。如果您在获取JSON数据方面没有问题,我认为它似乎对您有效。
var obj = JSON.parse(request.responstext);
console.log(obj.datas.General[0].id);
console.log(obj.datas.Photos[1].id);
JSON数据类型类似于Array。您应该了解JSON.stringify()和JSON.parse()方法。
试试这个:
<body>
<mytag id="hotel_name"></mytag>
<script>
var xhr = null;
var myDiv = document.getElementById("hotel_name");
function load() {
xhr = new XMLHttpRequest();
if (xhr != null) {
xhr.addEventListener("readystatechange", callback, false);
xhr.open("get", "datas.json", true);
xhr.send();
} else {
alert("not support ajax!!");
}
}
function callback() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
var data = JSON.parse(xhr.responseText);
myDiv.innerHTML = data.datas.General[0].value;
} else {
myDiv.innerHTML = "<h2>" + xhr.status + ": " + xhr.statusText + "</h2>";
}
}
}
load()
</script>
</body>
相关文章:
- CSS/HTML:更改文本的值并在悬停时从中心展开
- 如何使用javascript localStorage保存用户选择并在不同的html页面中显示
- 如何获取javascript输入并在html中调用它
- javascript从选中的复选框中检索输入值,并在同一网页中显示多个html文件
- 使用javascript读取本地XML文件并在html页面中显示
- 获取 HTML 5 音频控制文件位置并在不使用 id 选择器的情况下更新 src
- 在DIV中动态插入HTML并访问新元素
- 在Javascript中解析json并在html上创建表
- 如何打开文件对象(HTML)并在谷歌应用程序脚本中解析它
- 如何等待一个HTML页面并在页面复杂创建时获得结果
- HTML按钮的作用类似于从键盘按下的键,并在某些对象或整个网站上起作用
- 从 html 表中选择一行(突出显示)并在单击按钮时发送值
- 如何使用 JQuQuery 解析 JSON 对象并在 HTML 页面中以表格格式打印输出
- 在 HTML 表中下拉,并在 javascript 中的表数据中选择值
- 如何通过HTML 5 javascript在本地ipad / iPhone上存储数据,并在设备上线时提交
- 保存(转义?)html 并在 json 对象中使用它
- 如何将markdown转换为html并在实践中使用
- 当ajax响应到达时,Onclick准备HTML并在react中呈现
- JavaFX:当我们构建html并在header中放置链接时,我们的javascript文件不工作.这是为什么?
- 如何通过YUI3返回HTML并在客户机上使用它