在for循环数组检查和JSON变量方面遇到问题

having troubles with for loop array check and JSON variables

本文关键字:变量 方面 遇到 问题 JSON 检查和 for 循环 数组      更新时间:2023-09-26

JS代码

<?php
date_default_timezone_set('America/Los_Angeles');
$date = date('Gi', time());
?>
<script type="text/javascript">
$(function() {
  $(".show_hide").click( function()
       {
    var locTime = <?php echo json_encode($date) ?>; 
$.getJSON( "url_to_json", function(data) {
var isClosed = true;    
    for (var i = 0; i < data.location.monday.length || isClosed; i++) { 
    console.log("sucess1");
    xr_mon= data.location.monday[i];
    console.log("sucess2");
     if (locTime >= xr_mon.kai && locTime < xr_mon.guan ){
        console.log("location is open!");
        isClosed = false; 
        $('.xr').show("drop", { direction: "up" }, 400); 
        }
    else {
        console.log("location is closed");
        $('.xr').hide("drop", {
              direction: "down"
          }, 800);
    }
    }
});
       }
  );
});
</script>

JSON代码

{ "location": 
{
    "monday": [
    {"kai": 700, "guan": 1400},
    {"kai": 1700, "guan": 2100}
    ]
}
}

在多次尝试此循环序列之后。

我仍然不明白为什么即使isClosed满足条件,它仍然在循环。我的代码中有遗漏吗???

找到了我的答案。

<?php
date_default_timezone_set('America/Los_Angeles');
$date = date('Gi', time());
?>
<script type="text/javascript">
$(function() {
  $(".show_hide").click( function()
   {
var locTime = <?php echo json_encode($date) ?>; 
$.getJSON( "url_to_json", function(data) {
for (var i = 0; i < data.location.monday.length; i++) { 
console.log("sucess1");
xr_mon= data.location.monday[i];
console.log("sucess2");
 if (locTime >= xr_mon.kai && locTime < xr_mon.guan ){
    console.log("location is open!");
    $('.xr').show("drop", { direction: "up" }, 400); 
    Break;
    }
else {
    console.log("location is closed");
    $('.xr').hide("drop", {
          direction: "down"
      }, 800);
}
}
});
   }
);
});
</script>

如果我理解得对,(编辑:修改为can)你能试着使用'&amp;'而不是循环条件中的"||"?

for (var i = 0; i < data.location.monday.length && isClosed; i++)

第2版:因为当它是1800时,循环将首先检查:{"kai":700,"guan":1400},条件不会返回true,因为1800不在700和1400之间。在第二次尝试{"开":1700,"关":2100}条件将返回true,因为1800在1700和2100之间。所以我建议用这种方式编辑你的剧本。这是你想要实现的吗?

var isClosed = true;    
    xr_mon= data.location.monday[0];
    xr_mon2= data.location.monday[1];
    if ((locTime >= xr_mon.kai && locTime < xr_mon.guan)  || (locTime >= xr_mon2.kai && locTime < xr_mon2.guan) ){
        console.log("location is open!");
        isClosed = false; 
        $('.xr').show("drop", { direction: "up" }, 400); 
        }
    else {
        console.log("location is closed");
        $('.xr').hide("drop", {direction: "down"}, 800);
    }