#javascript #php #jquery #jquery-ui-datepicker
Вопрос:
Здравствуйте, у меня не так много опыта, но обычно с помощью 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);
Комментарии:
1. боретесь с блокировкой значений из базы данных в датапикере ???
2. Может быть, здесь чего-то не хватает, например:
dates.push(data)
. Это перенесет все данные на даты, не так ли?3. В чем проблема? Укажите это здесь.
4. Я имею в виду, что отступ немного смещен, но ваша инструкция » return [ dates.indexOf(строка) == -1 ]` выполняется до завершения вызова ajax. так что это в основном и будет
return [ true ]
. Но, как упоминалось предыдущими комментаторами, включите четкое изложение проблемы и того, чего вы хотите достичь. И, как упоминает @Don’dates.push(data)
Tp, вероятно, должно бытьdates.push(data[i])
5. Кроме того, это будет выполняться для каждой даты, указанной в календаре. Вероятно, вы не хотите совершать один и тот же звонок, чтобы load_days.php так много раз
Ответ №1:
Во — первых, я бы предложил изменить PHP-скрипт, чтобы удалить оболочку ['day' => date]
массива вокруг даты каждого события. Это облегчит JavaScript поиск дат в массиве.
foreach($result as $row) {
$data[] = date("d-m-Y", strtotime($row["start_event"]));
}
Затем я бы немного реорганизовал JS, чтобы даты из load_days.php загружаются только один раз, а затем используются повторно, а не перезагружаются в каждом событии перед шоу. После переформатирования данных, возвращаемых 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"
});
})