WordPress wp_ajax没有按预期工作

时间:2012-08-06 23:48:56

标签: jquery ajax wordpress

现在已经看了几个小时的WP ajax文档但仍然不能 想出来

所有代码都在单页上。试图通过ajax更新一些选项 它只是不起作用。回应是说它成功,但是 current_form选项未更新。任何帮助将不胜感激。

<?php
add_action('wp_ajax_AWNT_save', 'AWNT_save_data');
function AWNT_save_data() {
update_option('current_form', 'foo');
}
echo get_option('current_form');
?>



<script type="text/javascript">
    jQuery(document).ready(function($) {
$('#save').click(function() { 
        var data = {
            action: 'AWNT_save',
            form_name : $('#form_name').val(),
customC: $('#customC').is(":checked"),
no_throttle: $('#no_throttle').is(":checked"),
form_code : $('#form_code').val()};

        jQuery.post( ajaxurl, data, function(response) {
            alert('Response: ' + response);
        });
    });
});
</script>

1 个答案:

答案 0 :(得分:0)

要使ajax工作,你需要添加两个动作挂钩,一个已经拥有,另一个需要在用户未登录时工作且它是wp_ajax_nopriv_AWNT_save,这将使ajax工作而无需登录最后在函数的最后添加die()以停止执行,否则它将始终返回0并且echo应该在函数内部使用。

add_action('wp_ajax_AWNT_save', 'AWNT_save_data');
add_action('wp_ajax_nopriv_AWNT_save', 'AWNT_save_data');
function AWNT_save_data() {
    update_option('current_form', 'foo');
    echo get_option('current_form'); 
    die(); // this should be here
}

此外,您应该从javascript中删除single.php并将其保存在单独的js文件中,例如在主题的根文件夹中创建子文件夹js或你想要什么,并将文件保存在该文件夹中,并将其命名为my_single_ajax.js,并将javascript代码粘贴到该文件中,如下所示

jQuery(document).ready(function($) { // my_single_ajax.js file
    $('#save').click(function() {
        var data = {
            action: 'AWNT_save',
            // more...
        };

        jQuery.post( ajaxurl, data, function(response) {
            alert('Response: ' + response);
        });
    });
});

functions.php文件中添加操作hook,如下所示

add_action('wp_enqueue_scripts', 'my_scripts_method');
function my_scripts_method() {
    if(is_single())
        wp_enqueue_script( 'my_single_ajax', get_bloginfo('stylesheet_directory').'/js/my_single_ajax.js'); // assumed your sub folder name is 'js' and file name is 'my_single_ajax.js'
}

这只会在脚本(my_single_ajax.js)为single.php时排队,就是它。