【问题标题】:jquery datepicker ui with ajax and php issue带有ajax和php问题的jquery datepicker ui
【发布时间】:2013-04-18 10:49:19
【问题描述】:

我想使用 jquery datepicker 来选择一个日期,然后在选择它时根据所选日期从数据库中进行选择查询 我已经寻找并找到了这个问题 jQuery datepicker with php and mysql 他们说我应该用ajax来做 但我无法理解他们所做的实施! 有人可以帮忙吗 我尝试做类似的事情

    <script>

$(function() {

    $( "#datepicker" ).datepicker({minDate: 0, showAnim: "bounce",
     onSelect: function(dateText, inst) {<?php mysql_select_db($database_conn, $conn);
$query_time = "SELECT reservation.R_time FROM reservation WHERE reservation.R_date='"?>dateText<?php "'" ;
$time = mysql_query($query_time, $conn) or die(mysql_error());</script>

【问题讨论】:

  • 这样使用PHP时,在创建页面时它运行在服务器上,它无法对用户在浏览器中所做的事情做出反应。你必须使用 AJAX——看看$.ajax$.get

标签: php jquery mysql ajax datepicker


【解决方案1】:

更改您的 JS 以在 onSelect 中发送 ajax 调用,传递 dateText

$( "#datepicker" ).datepicker({
    minDate: 0, 
    showAnim: "bounce",
    onSelect: function(dateText, inst) {
        $.ajax({
            type: 'POST',
            url: 'select_time.php',
            data: {date : dateText},
            success: function(resp){
                if(false !== resp){
                    alert(resp);
                }
            }
        });
    }
});

然后在select_time.php

<?php
    if(!empty($_POST['date'])):
        $mysqli = new mysqli('connection info'); //mysqli connection
        $stmt= $mysqli->prepare('SELECT reservation.R_time FROM reservation WHERE reservation.R_date = ?'); //prepare the statement
        $stmt->bind_param('s', $_POST['date']); //bind our parameters
        $stmt->execute(); //execute our query
        $stmt->store_result(); // store result so we can check rows
        $stmt->bind_result($resTime); //we only want the reserveration time
        $stmt->fetch(); //fetch the rows
        if($stmt->num_rows() > 0):
            echo $resTime;  //return the time from the database
            $stmt->close(); //close the statement
        else:
            return false; //row doesn't exist, return false
        endif;
    endif;    
?>

这是未经测试的,但我看不出它不应该工作的任何原因。

【讨论】:

    【解决方案2】:

    我认为您混淆了几件事:

    首先,PHP 将始终在页面加载之前运行(因此 jQuery 也是如此),因此在 jQuery 选择器上调用 PHP 将永远不会起作用。

    您需要做的是创建一个将在 jQuery 的 onSelect 上触发的 ajax 函数(如果它是弹出日历,我通常使用 onClose 事件)。

    Javascript:

    $( "#datepicker" ).datepicker({
    minDate: 0, 
    showAnim: "bounce",
    onClose: function(dateText, inst) {
       $.post('select_time.php?dateText=' + dateText, function(queryResult){
             // do something with the return query
       });
    }
    });
    

    PHP 页面:

    $connection = mysqli_connect("localhost","username","password","db");
    
    $sql = "SELECT reservation.R_time FROM reservation WHERE reservation.R_date={$_post['dateText']}";
    
    if ($result = mysqli_query($connection , $sql))
      {
         while ($getData = mysqli_fetch_field($result))
           {
              echo $getData->R_time;
           }
         mysqli_free_result($result);
      }
    
    mysqli_close($connection);
    

    【讨论】:

    • 非常感谢,我还有一个问题,如果我想从该页面获取 $time 变量怎么办,是否需要任何声明或仅在原始页面中定义该变量日期选择器?
    • 请不要使用此答案中提供的 MySQL。它已被弃用且充满缺陷。这是不安全的。相反,使用MySQLI
    • 对不起,我对你的问题有点困惑。 PHP 页面上的 $time 变量将回显到 javascript 页面,并在响应变量 queryResult 中可用(在上面的代码中)。从那里你可以用它做你喜欢的事情。 @Ohgodwhy 好点。为了清楚起见,我只是试图复制/粘贴 OP 所写的内容。
    • 请使用 MySQLI 更新帖子,我将恢复负点!
    • 哪个帖子?问题还是答案?以及如何做到这一点? ? ? ?
    猜你喜欢
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多