javascript - JQuery DatePicker 通过 PHP Json 不可用日期

标签 javascript php jquery json datepicker

我正在尝试从 MySQL 数据库检索日期,该数据库将用于动态禁用日期选择器 UI 中的日期。我已经从数据库中检索了日期并将其编码为 JSON。这是 echo JSON 的输出:

[
 {"dates":"21-03-2016"},
 {"dates":"31-03-2016"},
 {"dates":"31-03-2016"},
 {"dates":"30-03-2016"}
 ] 

我尝试将 getJSON 发送到 javascript 页面,在该页面中将检索该 JSON 并用于消除日期。但是,它不起作用,因为日期选择器 UI 甚至不再出现。

有什么建议吗?谢谢。

checkDates.php

<?php
$servername = "localhost";
$username = "user";
$password = "user";
$dbname = "ebooking";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
 } 

$sql = "select booking_date from booking";
$result = $conn->query($sql);

$checkDates = array();

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        $checkDate['dates'] = $row['booking_date'];
       
        $checkDates[] = $checkDate;
    }
} else {
    echo "0 results";
}
echo json_encode($checkDates);
 $conn->close();
 ?> 
 

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    <link rel="stylesheet"
          href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
    <script src="//code.jquery.com/jquery-1.10.2.js"></script>
    <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
    <link rel="stylesheet" href="/resources/demos/style.css">

    <script>
        $(function() {
            $( "#datepicker" ).datepicker({
                dateFormat: 'dd-mm-yy',
                beforeShowDay: checkAvailability

            });
        })
        
        $.getJSON('checkDates.php?dld='+ id, function(json){dates=json;});

        function checkAvailability(mydate){
            var myBadDates = dates;

            var $return=true;
            var $returnclass ="available";
            $checkdate = $.datepicker.formatDate('dd-mm-yy', mydate);

            // start loop
            for(var x in myBadDates)
            {
                $myBadDates = new Array( myBadDates[x]['start']);

                for(var i = 0; i < $myBadDates.length; i++)
                    if($myBadDates[i] == $checkdate)
                    {
                        $return = false;
                        $returnclass= "unavailable";
                    }
            }
            //end loop

            return [$return,$returnclass];
        }
    </script>
</head>
<body>
Date:
<input type="text" id="datepicker">
</body>
</html>

最佳答案

好的,我对你的 JavaScript 做了一些修改,这是我想出的代码:

$(function() {
  //ajax call better placed here.
  id="my ID"; //Define id, as it's not defined in the original post.
  /* Commented out just for JsFiddle, uncomment this for live version.
  $.getJSON('checkDates.php?dld=' + id, function(json) {
    dates = json;


    $("#datepicker").datepicker({
      dateFormat: 'dd-mm-yy',
      beforeShowDay: checkAvailability

    });
  });
  */
  //For JsFiddle ONLY remove this section of code for live version.
  dates = [{
    "dates": "21-03-2016"
  }, {
    "dates": "31-03-2016"
  }, {
    "dates": "31-03-2016"
  }, {
    "dates": "30-03-2016"
  }];
  $("#datepicker").datepicker({
    dateFormat: 'dd-mm-yy',
    beforeShowDay: checkAvailability

  });
  //End for JsFiddle
});




function checkAvailability(mydate) {


  var myBadDates = dates;

  var $return = true;
  var $returnclass = "available";
  $checkdate = $.datepicker.formatDate('dd-mm-yy', mydate);


  // start loop


  for (var x in myBadDates) {

    if (myBadDates[x].dates == $checkdate) {
      $return = false;
      $returnclass = "unavailable";
    }



  } //end loop



  return [$return, $returnclass];
}

请参阅jsFiddle: https://jsfiddle.net/gregborbonus/v1dwqq5r/1/

如果ajax失败,那么它就会崩溃。

我已经编辑了代码,更新后的 jsFiddle 在这里: https://jsfiddle.net/gregborbonus/v1dwqq5r/2/

你的 php 可能会吐出一些不同的东西,如果这对你不起作用,请链接到你的 php 脚本,我可以测试正确的 header 并测试 ajax 调用本身,但我怀疑这甚至是一个问题。

关于javascript - JQuery DatePicker 通过 PHP Json 不可用日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36237211/

相关文章:

javascript - 数组的 length 属性在 for 循环中无法正常工作

php - 多个搜索词的搜索查询

php - 如何在mysql表中插入撇号?

javascript - 如何将 HTML 元素链接到对象?

javascript - 为视网膜和非视网膜显示器创建背景图像

javascript - For 循环内的 NodeJS 和 Mongoose 回调

javascript - 禁用动态页码上的第一个上一个按钮

javascript - 使用 setTimeout 重新加载图像

php - 使用 Guzzle 检查远程文件是否存在的最佳方法是什么?

javascript - 如何修复打开并刷新页面后自动关闭的弹出窗口?