为什么我的PHP数组没有作为数组发布到JavaScript?
这是我第一次构建自己的JavaScript代码,所以还没有完全跟上它的速度 我正在查询我的MySQL数据库以获取所有禁用的日期,以便在日期选择器中禁用结果。我几乎可以做到这一点,但问题是,当从数据库中读取两个值时,只有一组值被传递到JavaScript变量。i、 e如果我的数据库中有两个预订,一个来自6/3/15-10/3/15,另一个来自14/3/15-17/3/15,那么JavaScript变量中只存储一个。i、 e 6/3/15-10/3/15 当我回显json_encode($date_list)时,得到的结果如下:为什么我的PHP数组没有作为数组发布到JavaScript?,javascript,php,mysql,arrays,jquery-ui,Javascript,Php,Mysql,Arrays,Jquery Ui,这是我第一次构建自己的JavaScript代码,所以还没有完全跟上它的速度 我正在查询我的MySQL数据库以获取所有禁用的日期,以便在日期选择器中禁用结果。我几乎可以做到这一点,但问题是,当从数据库中读取两个值时,只有一组值被传递到JavaScript变量。i、 e如果我的数据库中有两个预订,一个来自6/3/15-10/3/15,另一个来自14/3/15-17/3/15,那么JavaScript变量中只存储一个。i、 e 6/3/15-10/3/15 当我回显json_encode($date_
["2015-3-14","2015-3-15","2015-3-16","2015-3-17","2015-3-17"]
["2015-3-6","2015-3-7","2015-3-8","2015-3-9","2015-3-10","2015-3-10"]
这是正确的,但当我在bookedDays变量上执行console.log时,只存储以下值:
["2015-3-6", "2015-3-7", "2015-3-8", "2015-3-9", "2015-3-10", "2015-3-10"]
下面是我正在使用的代码
<?php
$bookeddates = "SELECT fromdate, todate FROM messages WHERE listing_id = '".$_GET['listingid']."'";
$resultbookeddates = mysql_query($bookeddates) or die(mysql_error() . "<br>" . $bookeddates);
while ($rowbookeddates = mysql_fetch_assoc($resultbookeddates)) {
$from = date('Y-n-j', strtotime($rowbookeddates['fromdate']));
$to = date('Y-n-j', strtotime($rowbookeddates['todate']));
$start_time = strtotime($from);
$end_time = strtotime($to);
$date_list = array($from);
$current_time = $start_time;
while($current_time < $end_time) {
//Add one day
$current_time += 86400;
$date_list[] = date('Y-n-j',$current_time);
}
$date_list[] = $to;
?>
<script type="text/javascript">
var bookedDays = <?php echo json_encode($date_list); ?>;
</script>
<?php
echo json_encode($date_list);
} ?>
您的问题是javascript变量的分段。
请在循环过程中移动到区域外,您可以看到所有结果
<?php
$bookeddates = "SELECT fromdate, todate FROM messages WHERE listing_id = '".$_GET['listingid']."'";
$resultbookeddates = mysql_query($bookeddates) or die(mysql_error() . "<br>" . $bookeddates);
while ($rowbookeddates = mysql_fetch_assoc($resultbookeddates)) {
$from = date('Y-n-j', strtotime($rowbookeddates['fromdate']));
$to = date('Y-n-j', strtotime($rowbookeddates['todate']));
$start_time = strtotime($from);
$end_time = strtotime($to);
$date_list = array($from);
$current_time = $start_time;
while($current_time < $end_time) {
//Add one day
$current_time += 86400;
$date_list[] = date('Y-n-j',$current_time);
}
$date_list[] = $to;
} ?>
<script type="text/javascript">
var bookedDays = <?php echo json_encode($date_list); ?>;
</script>
您需要像这样将注入的JS移出while循环。正如评论中所说,首先构建数据,然后输出数据
<?php
$bookeddates = "SELECT fromdate, todate FROM messages WHERE listing_id = '".$_GET['listingid']."'";
$resultbookeddates = mysql_query($bookeddates) or die(mysql_error() . "<br>" . $bookeddates);
$date_list = array();
while ($rowbookeddates = mysql_fetch_assoc($resultbookeddates)) {
$from = date('Y-n-j', strtotime($rowbookeddates['fromdate']));
$to = date('Y-n-j', strtotime($rowbookeddates['todate']));
$start_time = strtotime($from);
$end_time = strtotime($to);
$date_list[] = $from;
$current_time = $start_time;
while($current_time < $end_time) {
//Add one day
$current_time += 86400;
$date_list[] = date('Y-n-j',$current_time);
}
$date_list[] = $to;
} ?>
<script type="text/javascript">
var bookedDays = <?php echo json_encode($date_list); ?>;
</script>
<?php
echo json_encode($date_list);
在每次迭代中(在每个
标记中),您都会覆盖bookedDays
变量。它将只保留最后一个值。尝试添加console.log(bookedDays)
就在
之前,您会看到所有的代码都会出现,稍后会被覆盖。@blex-我该如何解决这个问题?我已经关闭了开始脚本标记之前的},但同样的问题是:/您不应该在循环中输出json,生成包含所有信息的数据结构,并在最后作为json输出。@jeroen-听起来不傻,我该怎么做?你知道任何例子吗?在循环之前定义你的数组$date\u list
(请注意,此时的答案都没有…),像现在一样填写循环并在循环之后输出。欢迎。提示一下,如果您得到了意外的结果,请查看页面源代码并检查其输出内容。你会看到很多这样的var bookedday
声明。