Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php jQuery Datepicker Beforeshowday-不可用日期的Ajax返回数组_Php_Jquery_Ajax_Datepicker - Fatal编程技术网

Php jQuery Datepicker Beforeshowday-不可用日期的Ajax返回数组

Php jQuery Datepicker Beforeshowday-不可用日期的Ajax返回数组,php,jquery,ajax,datepicker,Php,Jquery,Ajax,Datepicker,我正在尝试使用日期选择器更新一组不可用的日期。如果我传递了一个PHP变量,下面的代码就可以正常工作,但是我遇到的问题似乎是正确返回了选项的数据(它抛出了一个控制台错误,即cannot read undefined或0): jQuery(文档).ready(函数(){ jQuery(“#MyDate”).datepicker({ minDate:“+2”, maxDate:新日期(2014年1月28日), 日期格式:“dd-mm-yy”, beforeShowDay:功能(日期){ //变量数组=

我正在尝试使用日期选择器更新一组不可用的日期。如果我传递了一个PHP变量,下面的代码就可以正常工作,但是我遇到的问题似乎是正确返回了选项的数据(它抛出了一个控制台错误,即cannot read undefined或0):

jQuery(文档).ready(函数(){
jQuery(“#MyDate”).datepicker({
minDate:“+2”,
maxDate:新日期(2014年1月28日),
日期格式:“dd-mm-yy”,
beforeShowDay:功能(日期){
//变量数组=[“”];
jQuery.ajax({
类型:“POST”,
url:“/wp admin/admin ajax.php”,
数据:{
行动:“不可用日期”,
不可用日期:“2”
},
成功:功能(输出){
保存变量(输出);
}
});
函数saveVariable(数据){
数组='“'+数据+'”;
console.log(数组);
var string=jQuery.datepicker.formatDate('yy/mm/dd',日期);
返回[array.indexOf(string)=-1];
}
},
onSelect:函数(日期文本){
jQuery(this.change();
}
})

注意控制台日志显示的内容与有效的注释var数组显示的内容相同。我使用一个函数来使用其相应代码返回的值,但它只返回一个逗号分隔的日期字符串,并且缺少其第一个和最后一个日期。例如,2013/12/12”、“2013/12/13”,“2013/12/14

问题是您没有从
beforeShowDay
方法返回任何值。该方法不允许异步调用

在您的情况下,在
beforeShowDay
中,您发送一个Ajax请求,然后该方法返回一个未定义的值,因此所有日期都将被视为有效,然后Ajax请求完成并调用
saveVariable
方法,但它对
beforeShowDay
返回的值没有任何影响还有一个问题是,日历中的每一天都在发送Ajax请求

建议的解决方案是在页面加载时加载所有不可用的日期,并在
beforeShowDay
方法中使用该数据

尝试:


这有点老套,但它可以工作。我必须创建一个按钮来调用datepicker。我尝试过的任何代码。同一元素上的click事件似乎没有及时更新..deferred等。只是没有启动datepicker。我能够获得一个Ajax,然后初始化datepicker,并在HTML onclick“”中插入整个代码在元素中,但我无法使用
复制此内容。请单击

无论如何,我的方法是:

  • 创建另一个按钮来触发
    (#元素)。单击
  • 创建Ajax函数以实时检索日期(如果您从另一个页面实时测试它,则需要大约5秒钟的时间)
  • 将日期选择器代码放入成功回调
  • 启动
    。单击
    事件
  • 步骤1:元素的HTML:

    <td><input type="text" id="MyDate" name="MyDate" readonly='true' value="click here" /></td><td><input type="button" id="button" name="button" value="Select date"></td></td>
    
    步骤3:上面代码中的mySuccessCallback()函数:

    function mySuccessCallback(dates) {
        array = dates
        jQuery('#MyDate').datepicker({
            minDate: '+2',
            maxDate: new Date(2014, 1,28),
            dateFormat: 'dd-mm-yy',
            beforeShowDay: function(date) {
                var string = jQuery.datepicker.formatDate('yy/mm/dd', date);
                return [ array.indexOf(string) == -1 ];
            },
            onSelect: function(dateText) {
                jQuery(this).change();
            }
        }).change(function() {
            if (document.getElementById('date_error_row').style.visibility == 'visible') {
                document.getElementById('date_error_row').style.visibility = 'hidden';
            }
            var postid = '<?php echo esc_js($posted_id); ?>';
            var pdate = jQuery(this).val(); //Select updated value
    
            jQuery.ajax({
                type:"POST",
                url: "/wp-admin/admin-ajax.php",
                data: {action: 'tempsave', postid: postid , postdate: pdate , status: 'waiting'},
                success:function(data){
                    jQuery("#feedback").html(data);
                }
            });
            jQuery('#MyDate').datepicker('destroy');
        });
        jQuery('#MyDate').datepicker('show');
    }
    

    问题是您没有从ShowDay之前的
    返回任何值,谢谢您的输入,不幸的是,我需要在单击时进行更新!我同意没有任何内容被传回,因此我想我正在寻找一种方法,将var数组从savevariable函数中传递出去,或者在ShowDay之前将结果转换为格式,可以吗se.@David当您单击what时,您需要更新what?我没有看到ajax请求的任何变量参数,因此这应该是正确的。变量将是不可用日期:2,我这样做是为了测试。当用户单击date字段时,函数应该提取一个新的不可用日期列表,因为其他用户也可能有相同的列表f日期从他们登上页面时算起。
    
    <td><input type="text" id="MyDate" name="MyDate" readonly='true' value="click here" /></td><td><input type="button" id="button" name="button" value="Select date"></td></td>
    
    AjaxGet = function () {
        jQuery.ajax({
            type: "POST",
            url: "/wp-admin/admin-ajax.php",
            data: {
                action: 'unavail_dates',
                unavaildates: '2'
            },
            success: function (output) {
                dates = jQuery.parseJSON('["'+output+'"]');
                mySuccessCallback( dates );
                console.log ( dates );
            }
        });
    };
    
    function mySuccessCallback(dates) {
        array = dates
        jQuery('#MyDate').datepicker({
            minDate: '+2',
            maxDate: new Date(2014, 1,28),
            dateFormat: 'dd-mm-yy',
            beforeShowDay: function(date) {
                var string = jQuery.datepicker.formatDate('yy/mm/dd', date);
                return [ array.indexOf(string) == -1 ];
            },
            onSelect: function(dateText) {
                jQuery(this).change();
            }
        }).change(function() {
            if (document.getElementById('date_error_row').style.visibility == 'visible') {
                document.getElementById('date_error_row').style.visibility = 'hidden';
            }
            var postid = '<?php echo esc_js($posted_id); ?>';
            var pdate = jQuery(this).val(); //Select updated value
    
            jQuery.ajax({
                type:"POST",
                url: "/wp-admin/admin-ajax.php",
                data: {action: 'tempsave', postid: postid , postdate: pdate , status: 'waiting'},
                success:function(data){
                    jQuery("#feedback").html(data);
                }
            });
            jQuery('#MyDate').datepicker('destroy');
        });
        jQuery('#MyDate').datepicker('show');
    }
    
    jQuery('#button').click(function() {
        AjaxGet();
    });