javascript - 如何使用按钮和js循环遍历json
问题描述
我写js代码失败,点击按钮后在html页面上一个接一个地显示json数组的元素。
我从本地服务器上的数据库以 json 格式接收单词。这是我的 http 请求,它返回 json 并尝试计算这个 json 有多少项目(为了让按钮理解,在点击超过 json 中的实际项目数之后,js 代码必须从头开始显示单词):
var ajax = new XMLHttpRequest();
var method = 'GET';
var url = 'data.php';
var asynchronous = true;
ajax.open(method, url, asynchronous);
ajax.send();
ajax.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{
var words = JSON.parse(this.responseText)
// alert(this.responseText);
console.log(words);
// console.log(words[0].word_item);
var i, j
for ( i in words){
console.log(words[i].word_item);
}
var arrayLenth = words.length;
console.log(arrayLenth);
return arrayLenth;
}
}
这是我收到的 json 数组:
0
:
{id: "1", word_item: "house"}
1
:
{id: "26", word_item: "architecto"}
2
:
{id: "27", word_item: "tenetur"}
3
:
{id: "28", word_item: "Adipisci"}
4
:
{id: "29", word_item: "provident"}
5
:
{id: "30", word_item: "tenetur"}
这是我的 js 按钮计数器。
var clicks = 0;
function clickCount(){
do {
clicks ++;
console.log(clicks);
document.getElementById('place').innerHTML=clicks;
if (clicks >=6) {
clicks=0;
};
}
while (clicks>=7);
}
在“if (clicks >=6)”行中,我希望看到的不是“6”,而是包含我的 json 长度的变量,但所有尝试都是徒劳的。
这是html页面:
<body>
<button onClick='clickCount()'>Жми</button>
<div id = 'place'></div>
我能做些什么来解决这个问题?
预期结果如下:
- js按钮计数器获取接收到的json数组的长度
- 通过单击按钮,我一个接一个地看到 json 数组的一个元素。当按钮点击次数超过数组长度时,计数器从零元素开始,并从开头显示 json 数组的元素。
谢谢
解决方案
如果我理解正确,解决方案是这样的:
const jsonArr = [
{ id: 0, field: "value" },
{ id: 1, field: "value2" },
{ id: 2, field: "value3" }
];
initializeButton(jsonArr);
function initializeButton(arr) {
let counter = 0;
btn.addEventListener("click", () => {
let element = arr[counter];
output.textContent = JSON.stringify(element);
counter = (counter + 1) % arr.length;
});
}
<button id="btn">Click here</button>
<output id="output"></output>
在您的代码中,您应该输入如下内容:
ajax.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var words = JSON.parse(this.responseText);
initializeButton(words);
}
};
推荐阅读
- mysql - 为什么我的 Spring Service 无法在 openshift paltform 上保持与我的数据库的连接?
- extjs - Grapesjs 的 ExtJS 集成
- django - 问题是图像没有保存。当我选择图像并上传所有代码正常工作但图像不保存 django
- c++ - C++ 新手,请帮助识别代码指针代码的问题
- html - 具有 aria-placeholder 属性的 role="textbox" 跨度出错
- reactjs - 请求标头导致“诺克:请求不匹配”
- java - Kafka Consumer 可以处理数百万的数据吗?在springboot中实现kafka消费者
- jwt - 在 traefik 中验证 JWT 令牌签名
- python - Pandas 索引和 Concat 将形状更改为 1
- postgresql - 从具有某种格式的特定列的值中获取不同的值