按日期检查jquery是不是为假期的功能
Posted
技术标签:
【中文标题】按日期检查jquery是不是为假期的功能【英文标题】:Function to check if it's holiday in jquery by date按日期检查jquery是否为假期的功能 【发布时间】:2017-11-29 20:08:29 【问题描述】:我正在尝试在 jquery 中创建一个函数,根据我的数据库检查给定日期是否为假期。我已经创建了函数:
IsAHoliday(date)
这是我的代码:
function IsAHoliday(date)
var datum = moment(date).format('YYYY-MM-DD');
var dataString = 'action='+ datum;
$.ajax (
type: "POST",
url: 'include/datumPraznik.php',
cache: false,
async: false,
data: dataString,
success: function(r)
return r;
);
使用此代码我无法执行类似的操作
if(IsAHoliday(date))
我怎样才能做到这一点?
编辑:这是我的 datumPraznik.php
<?php
include_once('db-config.php');
$datum = $_REQUEST['action'];
$stmt=$db_con->prepare('SELECT * FROM praznici WHERE praznik_datum=:datum');
$stmt->execute(array(':datum'=>$datum));
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
if(count($row)>0)
$praznik = true;
else
$praznik = false;
echo $praznik;
?>
【问题讨论】:
你的 datumPraznik.php 代码是什么? @Dino 我已经更新了我的问题。 由于ajax调用是异步的,所以需要把你的处理放到代码的成功部分 【参考方案1】:那么你可以做些什么让你的 PHP 返回 JSON,这样你就可以使用 AJAX 成功函数来处理它。
$datum = $_REQUEST['action'];
$stmt=$db_con->prepare('SELECT * FROM praznici WHERE praznik_datum='.$datum);
$stmt->execute();
if($stmt->fetchColumn() > 0)
$praznik = true;
else
$praznik = false;
return json_encode(array('praznik' => $praznik));
你的 AJAX 会是
$.post('include/datumPraznik.php', data, function(d)
if(d.praznik === true)
console.log('This is a holiday');
else
console.log('This is not a holiday');
);
所以你更新的函数是:
function isHoliday(date)
var datum = moment(date).format('YYYY-MM-DD');
var data = 'action='+ datum;
$.post('include/datumPraznik.php', data, function(d)
if(d.praznik === true)
return true;
else
return false;
);
并将其用作:
if(isHoliday(date) === true)
// do something
【讨论】:
感谢您的回答。我在 datumPraznik.php 中添加了一行echo json_encode(array('praznik' => $praznik));
,所以像 site/datumPraznik.php?action=2017-06-26 这样运行 smth 会给出正确的结果。但是在 Inspect Element Console 中运行函数 IsHoliday("2017-06-26") 会给我未定义的结果...【参考方案2】:
首先,PHP需要返回JSON,所以改一下:
echo $praznik;
到:
echo json_encode($praznik);
第二,由于 AJAX 是异步的(你不应该使用async: false
),你的函数应该接受回调:
function IsAHoliday(date, truecb, falsecb)
var datum = moment(date).format('YYYY-MM-DD');
var dataString = 'action='+ datum;
$.ajax (
type: "POST",
url: 'include/datumPraznik.php',
cache: false,
data: dataString,
success: function(r)
if (r)
truecb();
else
falsecb();
);
然后你可以这样称呼它:
IsAHoliday(date, function()
// stuff to do on holiday
, function()
// stuff to do on non-holiday
);
【讨论】:
【参考方案3】:我无法使用您的解决方案解决我的问题,但我已经将它们结合起来并得出了这个解决方案。
-
我创建了一个全局变量(数组)并调用了 ajax,它返回 ALL HOLIDAY DATES 并将它们存储在全局变量中。
var prazniciArray = [];
$(document).ready(function()
$.ajax (
type: "POST",
url: 'include/datumPraznik.php',
dataType: 'json',
cache: false,
success: function(rez)
praznici = rez;
for (var i = 0; i < praznici.length; i++)
prazniciArray.push(moment(praznici[i]));
$('#datetimepicker1').data("DateTimePicker").disabledDates(prazniciArray);
);
-
之后我就可以制作函数了:
function IsHoliday(date)
var datum = moment(date).format('YYYY-MM-DD');
if(jQuery.inArray(datum, praznici) !== -1)
return true
else
return false;
-
datumPraznik.php
<?php
include_once('db-config.php');
$stmt=$db_con->prepare('SELECT praznik_datum FROM praznici');
$stmt->execute();
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
$praznici = count($row);
$prazniciarray = array();
for ($i = 0; $i < $praznici; $i++)
array_push($prazniciarray,$row[$i]["praznik_datum"]);
echo json_encode($prazniciarray);
?>
我的桌子是这样的:
praznik_id | praznik_ime | praznik_datum
-----------------------------------------
| 1 | Thanksgiving | 2017.07.01
【讨论】:
以上是关于按日期检查jquery是不是为假期的功能的主要内容,如果未能解决你的问题,请参考以下文章