为什么我的PHP数组没有作为数组发布到JavaScript

Why is my PHP array not posting as an array to JavaScript?

本文关键字:数组 JavaScript 我的 PHP 为什么      更新时间:2023-09-26

这是我第一次构建自己的JavaScript代码,所以还没有完全跟上。

我正在查询我的MySQL数据库以获取所有禁用的天数,以便在日期选择器中禁用结果。我几乎做到了,但问题是,当从数据库中读取两个值时,只有一组值被发布到JavaScript变量。即,如果我的数据库中有两个预订,一个是2015年6月3日至2015年10月3日,另一个是2014年3月15日至2017年3月3日。JavaScript变量中只存储了一个。即2015年6月3日至2015年10月3日。

当我回显json_encode($date_list)时,我得到的结果是:

["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); 
            } ?>

如有任何帮助,我们将不胜感激。

您需要像这样将注入的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); 

您的问题是javascript变量的存在。请移动到while循环段之外,您可以看到所有结果。

<?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>