AJAX call returns 0

时间:2016-04-28 作者:Fafanellu

尽管有许多类似的帖子,但所有提议的解决方案都不适合我,所以我们来了。

我有以下脚本:

jQuery(\'#term\').keyup(ajaxChange);

        function ajaxChange(){
            var newFormChange = jQuery("#term").val();
            alert (newFormChange);
            jQuery.ajax({
                type:"POST",
                action: "my_test_action",
                url: "/wp-admin/admin-ajax.php",
                data: newFormChange,
                success:function(data){
                    console.log(data);
                }
            });

        return false;
        }
PHP如下所示:

function my_test_action() {

    $var = "this is a test";
    wp_send_json($var);

    die();
}

add_action( \'wp_ajax_my_test_action\', \'my_test_action\' );
add_action( \'wp_ajax_nopriv_my_test_action\', \'my_test_action\' );
我也尝试过:echo json_encode($var)echo $var, 而不是wp_send_json() 但该函数在浏览器控制台中始终返回0!

我的其他AJAX调用可以工作,例如,我有另一个调用PHP脚本的调用,该脚本调用WP查询并显示一些帖子,它工作得很好。

EDIT : 以下是如何包含我的脚本:

 function add_js() {

         if (is_page_template()) {
            wp_enqueue_script( \'mycustomscript\', get_stylesheet_directory_uri().\'/js/mycustomscript.js\', array(\'jquery\'), \'1.0\', true );

            wp_localize_script(\'mycustomscript\', \'ajaxurl\', admin_url( \'admin-ajax.php\' ) );
        }
    }
    add_action(\'wp_enqueue_scripts\', \'add_js\');
我认为问题来自newFormChange 变量,因为jQuery(this).serialize(); 一开始不起作用,因为表单未提交,但只有一个字段发生了更改。所以我用var代替了它newFormChange = jQuery("#term").val(); 但也许有个问题url: "/wp-admin/admin-ajax.php"

我哪里弄错了?谢谢

3 个回复
最合适的回答,由SO网友:Sumit 整理而成

请注意action 应该在data 钥匙在您的post请求中,没有名为的密钥action 因此,永远不会调用回调函数。

考虑以下示例:-

jQuery.ajax({
    type:"POST",
    url: "/wp-admin/admin-ajax.php",
    data: { 
        action: "my_test_action",
        form_data : newFormChange
    },
    success: function (data) {
        console.log(data);
    }
});
Also Note: 不要像这样使用相对Ajax URL/wp-admin/admin-ajax.php. 您可以使用wp_localize_script(). 看到这些了吗examples

SO网友:tam

似乎at有问题url: "/wp-admin/admin-ajax.php", 请尝试添加完整路径:

function addajaxurl() {
    wp_localize_script( \'frontend-ajax\', \'frontendajax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' )));
}
add_action( \'wp_enqueue_scripts\', \'addajaxurl\' );
并在ajax函数中调用变量:

        jQuery.ajax({
            type:"POST",
            url: ajaxurl,
            data: newFormChange,
            success:function(data){
                console.log(data);
            }
        }); 

SO网友:Florian

问题出在action参数中。在javascript函数中,请尝试:

var newFormChange = jQuery("#term").val();

    jQuery.ajax({
                    type: "POST",
                    url: "/wp-admin/admin-ajax.php",
                    data: {
                        action: "my_test_action",
                        newFormChange: newFormChange
                    }   ,
                    success: function(data) {
                        console.log(data);
                  alert(data);


                });
您还应该卸下模具();从php函数。它已经在wp\\u send\\u json中。