在不重新加载页面的情况下循环访问 JSON 的内容
Looping over contents of a JSON without reloading the page
我有一个JSON数组(?(,其中包含每个状态的对以及与该状态关联的值,如下所示:
var states = [{"STATE":"AL","AMOUNT":"6"}, {"STATE":"AK","AMOUNT":"3"}]
我需要页面在不重新加载页面的情况下随机浏览它们
"AL 6" [等待 x 秒] 然后"AK 3" [等待 x 秒] 然后等等...
我需要它连续运行。
我从不使用任何这些语言,但被告知它们是我最好的选择。
有人可以给我一些指导吗?
提前谢谢你。
这是一个带有setInterval的jsfiddle,它执行一个在每个状态之间交替的函数,并将其显示在div中:
http://jsfiddle.net/WD5Qj/1/
var states = '[{"STATE":"AL","AMOUNT":"6"}, {"STATE":"AK","AMOUNT":"3"}]';
json = jQuery.parseJSON(states);
var i = 0;
var cycle = function(){
$("#state").html(json[i].STATE + json[i].AMOUNT);
i = (i+1)%json.length;
}
var loop = setInterval(cycle, 500);
好吧,你需要一个在数组中旋转的函数,以及一个用于保持当前状态的变量(在这个词的两个含义中(:
var stateIndex = 0;
function rotate() {
stateIndex++;
if(stateIndex >= states.length)
stateIndex = 0;
displayState(states[stateIndex]);
}
而且您需要一个间隔来执行旋转:
var stateRotation = window.setInterval(rotate, 3000); // 3000ms = 3 sec
stateRotation
变量是间隔的标识符。如果你想停止,你可以使用它:window.clearInterval(stateRotation);
现在,上面的代码预期一个函数displayState
,该函数接受状态对象并显示它。它的外观完全取决于您希望状态的显示方式。在最简单的形式中,像这样:
function displayState(state) {
$('#state-name').html(state.STATE);
$('#state-amount').html(state.AMOUNT);
}
根据您的描述,它可能更像
$('#state-text').html(state.STATE + ' ' + state.AMOUNT);
var states = [{"STATE":"AL","AMOUNT":"6"}, {"STATE":"AK","AMOUNT":"3"}];
var i = 0;
setInterval(function(){
var array_index = i % states.length;
$('#state').html( states[ array_index ]['STATE'] );
$('#state').html( states[ array_index ]['AMOUNT'] );
i++;
}, 2000);
这是一个小提琴。
function displayNextItem(index){
if (index === states.length)
displayNextItem(0);
$("#someDiv").text(states[index]["STATE"] + " " + states[index]["AMOUNT"]);
setTimeout(function() { displayNextItem(index + 1); }, 1000);
}
然后
displayNextItem(0);
var i = 0, l = states.length, timer, intervalLength = 5000;
timer = setInterval(function(){
if(i >= l){
clearInterval(timer);
}else{
alert(states[i++].STATE);
}
},intervalLength);
此实现正在等待AMOUNT
秒数。如果你想要恒定的秒数,那么其他答案:)更好。
JavaScript:
var states = [{"STATE":"AL","AMOUNT":"6"}, {"STATE":"AK","AMOUNT":"3"}];
function iterate(index) {
var time = states[index].AMOUNT;
// replace the text with new one
$("#output").text(states[index].STATE + " " + time);
setTimeout(function() {
var next = (index + 1) % states.length;
iterate(next);
}, time * 1000);
}
iterate(0);
这是代码。
相关文章:
- 在不使用循环的情况下,从一个数据库字符串值向javascript数组添加多个对象
- 如何在不进入无限循环的情况下将网站重定向到Facebook画布URL
- jQuery:如何在没有for循环的情况下将事件处理程序应用于$('#text'+'任意整数
- 如何在不每秒调用太多次的情况下通过Soundcloud解析api进行循环
- JavaScript while循环没有'不能在有条件的情况下工作
- 在没有大量回调函数的情况下在列表元素上循环播放同一动画
- 在 JS 中使 for 循环在没有库的情况下等待
- 在forEach循环中创建promise,并在不嵌套的情况下使用它们
- 如何在不使用for循环的情况下增量增加变量的值
- Javascript-在没有循环的情况下生成多个随机数
- Bxslider预加载程序在没有图像的情况下以无限循环运行
- 在给定偏移量大于数组的情况下,在数组上无缝循环,向前或向后循环
- jQuery:如何在不使用每个循环的情况下显示数组的第一个元素
- 在没有javascript循环的情况下多次执行命令
- 循环中的一个变量 - 如何在我的情况下修复它
- JavaScript/jQuery 脚本在没有循环的情况下循环 3 次
- 在不访问对象键的情况下循环访问对象值
- 有没有办法在不使用循环的情况下更新多个文档以将特定数字添加到一列
- 如何在不使用任何循环的情况下增加元素的宽度
- Firefox/Firebug JavaScript 控制台.log在某些情况下无法在 for 循环中工作