【问题标题】:JQuery Datepicker to PHP variable without formJQuery Datepicker到PHP变量没有形式
【发布时间】:2016-06-23 00:28:33
【问题描述】:

我遇到了一种情况,我觉得解决起来很简单,但我似乎找不到正确的关键字/方法。

我有什么

一个没有表单的 JQuery Datepicker。它附加到一个跨度,因为我希望我的日历成为我网站上的菜单项。如果我悬停/单击“日历”菜单项,日期选择器会显示:

<ul class="menu vertical">
  <li>
    <span id="datepicker"></span>
  </li>
</ul>

我想要/需要什么

我想将使用 datepicker 选择的日期传递给 PHP,所以我可以将它用作网站其他地方的变量。

我相信,从其他情况来看,使用 Ajax 应该是可能的。但我发现的所有示例都包括输入字段和/或提交按钮。我没有表格,因为我只想从菜单中显示日期选择器。

我能做到这一点的最佳方法是什么?

-- 编辑--

也许我应该多解释一下。我有图像,保存在 dd-mm-yy 文件夹中。我希望能够使用日期选择器选择一个日期,然后在画廊中显示该文件夹中的图像。这是画廊的代码:

<?php
$date = INPUT FROM DATEPICKER HERE;
$dirname = "images/$date/";
$images = glob($dirname."*.jpg");
echo '<div id="slider" class="flexslider"><ul class="slides">';
foreach($images as $image) {
    $titel = basename("$image", ".jpg").PHP_EOL;
    echo '<li><img src="'.$image.'" alt="'.basename("$image", ".jpg").PHP_EOL.'"><p class="flex-caption">'.str_replace("_", " ", $titel).'</p></li>';
};
echo '</ul></div>';
?>

【问题讨论】:

  • 使用你见过的使用 AJAX 和表单的示例,除了使用 jQuery datepicker 的 onSelect 而不是在表单提交上运行 AJAX。

标签: javascript php jquery ajax datepicker


【解决方案1】:

Javascript 更新

$("#datepicker").datepicker({
    onSelect: function() {
        var date = $('#datepicker').datepicker("getDate");
        $.ajax({
            url: "processdate.php",
            type: "POST",
            async: true,
            data: {
                selected_date: date
            },
            success: function(resp) {
                if (resp === "true") {
                    alert("it worked");
                } else {
                    alert("nope :-(");
                }
            } 
        });
    }
}).datepicker("setDate", new Date());//Set current date.

JAVASCRIPT 注释

这会将日期设置为当前日期,仅用于显示目的,但它不会运行 AJAX 调用,因为如果这样做,您的用户将立即被重定向。我个人建议在前往下一页的日期选择器旁边添加一个按钮,而不是在选择时自动重定向。

processdate.php,在有js的页面所在目录下创建这个php文件

<?php
session_start();
if(isset($_POST["selected_date"])){
    $_SESSION["date"] = $_POST["selected_date"];
    echo "true";
} else {
    echo "false";
}
?>

你的 php,这是你在 AJAX 工作后应该重定向到的页面。

<?php
session_start();
$date = $_SESSION["date"];
$dirname = "images/$date/";
$images = glob($dirname."*.jpg");
echo '<div id="slider" class="flexslider"><ul class="slides">';
foreach($images as $image) {
    $titel = basename("$image", ".jpg").PHP_EOL;
    echo '<li><img src="'.$image.'" alt="'.basename("$image", ".jpg").PHP_EOL.'"><p class="flex-caption">'.str_replace("_", " ", $titel).'</p></li>';
};
echo '</ul></div>';
?>

一旦你有这个工作替换alert("it worked");,如果它成功的话,我假设你会重定向到你的图片页面。

【讨论】:

  • 经过测试,应该可以工作,最好将var date = $(this).html();替换为var date = $('#datepicker').datepicker("getDate");
  • 我将您的代码添加到我的页面并使用 'echo $_POST['selected_date'];' 创建了 processdate.php在其中,但如果我选择一个日期,我会得到“不 :-(”。出了什么问题?
  • @ZipperZapper 成功代码正在检查响应是否仅包含单词“true”。因此,当您回显接收到的日期时,它会导致函数打印出“nope :-(”。
  • @Gareth 对不起,我不明白你的意思。我用一些额外的信息编辑了我的原始问题,也许它会有所帮助。
  • 我把这个答案与另一个类似的答案混淆了,再次编辑。
【解决方案2】:

你可以做一个post,它是post方法的简写ajax。

$.post('path/to/php', {variable_name: $('#datepicker')}, function(return_data, result, xhr){
    if(result == 'success')
        console.log(return_data); //or do whatever you want, or keep it empty
});

然后你可以在你的 php 中再次接收这个变量,就像你会像这样的普通帖子一样:

$_POST['variable_name']

【讨论】:

    猜你喜欢
    • 2018-05-18
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多