我正在尝试从MySQL数据库中检索日期,该数据库将用于动态禁用datepicker UI中的日期。我从数据库中检索了日期并将其编码为JSON。这是echo JSON的输出:
[
{"dates":"21-03-2016"},
{"dates":"31-03-2016"},
{"dates":"31-03-2016"},
{"dates":"30-03-2016"}
]
我已经尝试将jSON添加到javascript页面,在那里它将被检索并用于消除日期。但是,它不起作用,因为日期选择器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>
答案 0 :(得分:1)
$(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脚本,我可以测试正确的标题并测试ajax调用本身,但是我怀疑这是一个问题。
答案 1 :(得分:0)
checkdates.php
<?php
//Set document mime type... this is important since you want to return json not text!
header('Content-Type: application/json');
$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()) {
$checkDates[] = $row['booking_date'];
}
} 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">
</head>
<body>
Date:
<input type="text" id="datepicker">
</body>
<script>
var badDates;
$.getJSON('checkDates.php, function(json){badDates=json;});
$(function() {
$( "#datepicker" ).datepicker({
dateFormat: 'dd-mm-yy',
beforeShowDay: function(date) {
if($.inArray($.datepicker.formatDate('dd-mm-yy', date ), badDates) > -1)
{
return [false,"Unavailable","Booked"];
}
else
{
return [true,"Available","Not Booked"];
}
}
});
})
</script>
</html>
试试这个。我将内容类型添加到php文件中。我也改变了一下javascript。
在php文件中编辑平面数组,谢谢@Greg_Borbonus