【发布时间】:2022-01-14 01:13:14
【问题描述】:
我正在使用 Jquery datepicker 来突出显示特定日期。日期是从 PHP 和 MySQL 的数据库中获取的。将根据选择标签中的选定值获取日期。日期已成功获取并显示在控制台中。
如果我直接获取脚本中的所有日期,那么它会显示突出显示的日期。但是当我使用 select 标签并通过 ajax 发送选定的值时,它不会。
jquery:
<script>
$(function() {
// An array of dates
var eventDates = {};
$("#select").on("change", function() {
var truck = $(this).val();
$.ajax({
url: 'ajax/vehicledate.php',
type: "POST",
/*contentType: "application/json; charset=utf-8",*/
data: {
val: truck
},
success: function(data) {
console.log(data);
}
});
// datepicker
$('#start').datepicker({
dateFormat: "yy-mm-dd",
beforeShowDay: function(date) {
var highlight = eventDates[date];
if (highlight) {
return [true, "event", 'Tooltip text'];
} else {
return [true, '', ''];
}
}
});
});
});
</script>
Jquery 获取所有日期
<script>
$(function() {
// An array of dates
var eventDates = {};
<?php
$sql = "SELECT * from `ut_trips` WHERE `deisel` > 0";
$result = $connect->query($sql);
while( $final=$result->fetch_assoc() )
{
?>
eventDates[new Date('<?php
$orgDate = date($final['date']);
$date = str_replace('-"', '/', $orgDate);
$newDate = date("Y/m/d", strtotime($date));
echo $newDate ?>')] = new Date(
'<?php $orgDate =date($final['date']);
$date = str_replace('-"', '/', $orgDate);
$newDate = date("Y/m/d", strtotime($date));
echo $newDate
?>'
);
<?php
}
?>
// datepicker
$('#start').datepicker({
dateFormat: "yy-mm-dd",
beforeShowDay: function(date) {
var highlight = eventDates[date];
if (highlight) {
return [true, "event", 'Tooltip text'];
} else {
return [true, '', ''];
}
}
});
});
});
</script>
ajax PHP 文件
<?php
include("../partials/connect.php");
$v = $_POST['val'];
$sql = "SELECT * from `table` WHERE `value1` > 0 AND `value2` = '".$v."'";
$result = $connect->query($sql);
while( $final=$result->fetch_assoc() )
{
?>
eventDates[new Date('<?php
$orgDate = date($final['date']);
$date = str_replace('-"', '/', $orgDate);
$newDate = date("Y/m/d", strtotime($date));
echo $newDate ?>')] = new Date(
'<?php $orgDate =date($final['date']);
$date = str_replace('-"', '/', $orgDate);
$newDate = date("Y/m/d", strtotime($date));
echo $newDate
?>'
);
<?php
}
?>
控制台输出
eventDates[new Date('2021/11/10')] = new Date(
'2021/11/10'
);
eventDates[new Date('2021/11/12')] = new Date(
'2021/11/12'
);
eventDates[new Date('2021/11/13')] = new Date(
'2021/11/13'
);
更新:
以 jason 格式回显日期
echo jason_encode($newDate);
jQuery
dataType: "json",
success: function(data) {
console.log(data);
return data;
}
using dataType: "json" 在控制台中不输出任何内容,如果我将其注释掉,它将在 colsole 中输出 eventDates[new Date('2021\/11\/12')] = new Date( '2021\/11\/12' );。
【问题讨论】:
-
除了将其记录到控制台之外,您没有对 AJAX 调用的响应做任何事情。它永远不会靠近您的日期选择器。输出作为字符串保留在
data中。让你的 PHP 输出 data(例如 JSON 格式)而不是 code,这样你就可以将数据从你的“成功”函数传递给 datepicker。重要的是要记住,AJAX 请求不会直接导致您的网页被更新,它们只是将响应接收回 JS 变量中,然后由您编写一些 JS 代码来处理该响应,然后使用它你想。 -
@ADyson 所以,我在 PHP 文件中定义了
dataType: "json"并将日期回显为json_encode($newDate)。但它也不会在控制台中输出任何内容。以及我应该使用什么来代替 concole.log 成功传递数据。 -
请注意,来自 AJAX 文件的查询极易受到 SQL 注入攻击。另外,您尝试过什么来解决问题?这是JS问题,PHP问题,还是MySQL问题?
-
@NicoHaase 问题已解决。将日期传递给 datepicker 是一个 ajax 问题。
标签: javascript php jquery mysql jquery-ui-datepicker