你好,我没有太多的经验,但通常在谷歌的帮助下,我可以弄清楚,但不是今天。我正在制作一个约会程序,我正在努力阻止日期选择器中DB的值。
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"
});
})