将 json 值存储到数组

Store json values to an array

你好,我没有太多经验,但通常在 google 的帮助下我可以弄清楚,但今天不行。我正在制作一个约会程序,但我正在努力阻止日期选择器中数据库的值。

JS:

  <script>
  $( function() {
    $( "#datepicker" ).datepicker({
      minDate: 2,
      maxDate: "1w",
      beforeShowDay: function(date)
      {
          var dates = new Array();
          $.ajax({
              url:"load_days.php",
              type:"POST",
              success:function(data)
              {
                for (var i = 0; i < data.length; i++){
                  dates.push(data)
                }
              },
              dataType:"json"
            })
            var string = jQuery.datepicker.formatDate('dd-mm-yy', date);
            return [ dates.indexOf(string) == -1 ]
      }
    });
  } );
  </script>

PHP 文件:

$data = array();

$query = "SELECT * FROM events ORDER BY id";

$statement = $connect->prepare($query);

$statement->execute();

$result = $statement->fetchAll();

foreach($result as $row)
{
    $data[] = array(
        'day'     =>  date("d-m-Y", strtotime($row["start_event"]))
    );
}

echo json_encode($data);

首先,我建议修改 PHP 脚本以删除每个事件日期周围的 ['day' => date] 数组包装器。这将使 JavaScript 更容易在数组中查找日期。

foreach($result as $row) {
    $data[] = date("d-m-Y", strtotime($row["start_event"]));
}

然后我会稍微重组 JS,以便 load_days.php 中的日期只加载一次然后重复使用,而不是在每个 beforeShowDay 事件中重新加载。如上图PHP返回的数据重新格式化后,ajax返回的数组可以直接使用,不再需要for循环转换

$( function() {
    $.ajax({
        url: "load_days.php",
        type: "POST",
        success: function (dates) {
            $( "#datepicker" ).datepicker({
                minDate: 2,
                maxDate: "1w",
                beforeShowDay: function(date)
                {
                    var string = jQuery.datepicker.formatDate('dd-mm-yy', date);
                    return [dates.indexOf(string) === -1]
                }
            })
        },
        dataType: "json"
    });
})