AJAX日历导航返回-1

时间:2011-09-20 作者:laras126

我想通过$month$year 单击上一个/下一个链接时通过AJAX获得的值,但我得到的只是-1 内容应该在哪里。我的JavaScript函数和AJAX调用位于自定义页面模板中,page-calendar.phpfunctions.php, see all of the code here. 总之,下面是相关的AJAX脚本:

在里面functions.php:

/* draw_ajax_calendar($month, $year) function, see link above for that */

// Date variable settings
$month = (int) ($_POST[\'month\'] ? $_POST[\'month\']
                                : ($_GET[\'month\'] ? $_GET[\'month\'] 
                                                  : date(\'m\')));

$year= (int) ($_POST[\'year\'] ? $_POST[\'year\']
                               : ($_GET[\'year\'] ? $_GET[\'year\'] 
                                                  : date(\'Y\')));


// Adding the AJAX hooks
add_action(\'wp_ajax_nopriv_draw_ajax_calendar\', \'draw_ajax_calendar\');
add_action(\'wp_ajax_draw_ajax_calendar\', \'draw_ajax_calendar\');
在中编写脚本page-template.php (另请参阅calendar-script.js,如下所示):

function nextMonthSwap(nextMonthVal,nextYearVal) {
        jQuery("#calendar-container").html("<h1>LOADING</h1>").show();
        var url="<?php echo $_ajax; ?>";
        jQuery.post(url, {month: nextMonthVal, year: nextYearVal}, function(data){
            jQuery("#calendar-container").html(data).show();
        });
        return false;
    }

    // attach the link event handlers
    jQuery(document).ready(function($) {
        $(\'#prev-link\').click(function(){ return prevMonthSwap(<?php echo $prevMonthVal; ?>,<?php echo $prevYearVal; ?>)});
        $(\'#next-link\').click(function(){ return nextMonthSwap(<?php echo $nextMonthVal; ?>,<?php echo $nextYearVal; ?>)});
    });
最后,HTML也在page-template.php:

<div id="calendar-container">

    <?php echo draw_ajax_calendar($month,$year); ?>

    <a id="prev-link" href="<?php echo $prev_href; ?>">&larr; Previous</a>
                &nbsp;&nbsp;&nbsp;&nbsp;

    <a id="next-link" href="<?php echo $next_href; ?>">Next &rarr;</a>

</div>
我引用了this similar post 并尝试将我的JS从page-calendar.phpcalendar-script.js 并将脚本包含在functions.php:

function enqueue_calendar_script() {

    // embed the javascript file that makes the AJAX request
    wp_register_script( \'calendar-script.js\', get_bloginfo(\'stylesheet_directory\').\'/scripts/calendar-script.js\');
    wp_enqueue_script( \'calendar-script.js\' );

    // declare the URL to the file that handles the AJAX request (wp-admin/admin-ajax.php)
    wp_localize_script( \'calendar-script.js\', \'wp_ajax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) ); 

}
add_action(\'wp_head\', \'enqueue_calendar_scripts\');
calendar-script.js 像这样又回到了通过$month$year 通过URL的值。登录和注销的行为相同,根据页面源,正在调用脚本。

如果这是长篇大论,请道歉,尽量彻底。非常感谢您的帮助!

1 个回复
最合适的回答,由SO网友:Brian Fegter 整理而成

在AJAX回调函数中回显输出,使用Exit回显输出后退出PHP

  • 既然已经本地化了ajaxurl变量,请在AJAX请求中使用它,将操作:“my\\u special\\u action”传递到AJAX请求中,无论您使用什么操作,请对nopriv和普通AJAX挂钩使用相同的操作

    function prevMonthSwap(prevMonthVal,prevYearVal) {
        jQuery("#calendar-container").html("<h1>LOADING</h1>").show();
        jQuery.post(ajaxurl, {action: \'my_special_action\', month: prevMonthVal, year: prevYearVal}, function(data){
            jQuery("#calendar-container").html(data).show();
        });
        return false;
    }
    
    以下是回调函数的结束方式:

    function draw_ajax_calendar(){
        //Your other code here
        echo $calendar;
        exit;
    }
    
    以下是AJAX挂钩的外观:

    add_action(\'wp_ajax_nopriv_my_special_action\', \'draw_ajax_calendar\');
    add_action(\'wp_ajax_my_special_ajax\', \'draw_ajax_calendar\');
    
    不确定你的日期变量发生了什么。您不应该将这些隔离到一个函数吗?

    希望这对你有所帮助。

  • 结束