【问题标题】:Why is my PHP array not posting as an array to JavaScript?为什么我的 PHP 数组没有作为数组发布到 JavaScript?
【发布时间】:2015-05-06 15:49:22
【问题描述】:

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

我正在查询我的 MySQL 数据库以获取所有禁用的日期,以便在日期选择器中禁用结果。我几乎可以正常工作,但问题是当从数据库中读取两个值时,只有一组值被发布到 JavaScript 变量。即,如果我的数据库中有两份预订,一份来自 6/3/15 - 10/3/15,一份来自 14/3/15 - 17/3/15,只有一份存储在 JavaScript 变量中。即 6/3/15 - 10/3/15。

当我回显 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); 

            } ?>

任何帮助将不胜感激。

【问题讨论】:

  • 您将在每次迭代中覆盖bookedDays 变量(在每个&lt;script&gt; 标记中)。它只会保留最后一个值。尝试在&lt;/script&gt; 之前添加console.log(bookedDays);,您会看到它们都出现了,只是稍后会被覆盖。
  • @blex - 我将如何解决这个问题?我在开始脚本标记之前关闭了 } 但同样的问题:/
  • 你不应该在你的循环中输出json,生成一个包含所有信息的数据结构,并在最后输出为json。
  • @jeroen - 听起来不傻,我该怎么做?你知道任何例子吗?
  • 在循环之前定义你的数组$date_list(请注意,此时的答案都不是……),像现在一样填写循环并在循环后输出。跨度>

标签: javascript php mysql arrays jquery-ui


【解决方案1】:

您需要像这样将注入的 JS 移到 while 循环之外。如cmets中所说,先构建数据,再输出。

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

【讨论】:

  • 欢迎。只是一个提示,如果您得到意外的结果,请查看页面源并检查其输出。你已经看到了很多 var bookeddays 这样的声明。
【解决方案2】:

您的问题是 javascript 变量的分配。 请将 asigment 移到 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>

【讨论】:

    猜你喜欢
    • 2016-06-15
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多