【问题标题】: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调用是异步的,所以需要把你的处理放到代码的成功部分

标签: javascript php jquery mysql database


【解决方案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' =&gt; $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】:

    我无法使用您的解决方案解决我的问题,但我已经将它们结合起来并得出了这个解决方案。

    1. 我创建了一个全局变量(数组)并调用了 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);
                } 
            });
        }
    
    1. 之后我就可以制作函数了:
    function IsHoliday(date) {
        var datum = moment(date).format('YYYY-MM-DD');
        if(jQuery.inArray(datum, praznici) !== -1)
        {
            return true
        }
        else
        {
            return false;
        }
    }
    
    1. 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   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多