0

已经看了几个小时的 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>
4

1 回答 1

0

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

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此而已。

于 2012-08-07T00:59:50.483 回答