Wordpress自定义PHP AJAX调用返回400错误请求,并且不执行

时间:2019-10-15 09:46:30

标签: php jquery ajax wordpress

我正在尝试构建一个用户可以关闭的简单cookie横幅。一旦设置了PHP会话和cookie(通过接受cookie),横幅应消失。但是我不断收到400错误的请求错误。

jQUery:

jQuery(window).load(function(){
jQuery("#cookie-close").click(function(eve){  
    jQuery.ajax({
        type: "post",
        url: ajax_var.url,
        data: "action=close_cookies&nonce="+ajax_var.nonce, 
        success: function(result){

             if(result == '1'){
             alert(result);
             jQuery('.cookie-banner').fadeOut();
             } // end if data

        }
    });
    eve.preventDefault();

    return false;
    });
});

functions.php:

if (!session_id()) {
    session_start();
}

add_action( 'wp_enqueue_scripts', 'my_enqueue' );


function my_enqueue() {
 wp_enqueue_script('close_cookies', get_template_directory_uri().'/scripts/js/ajax.js', '1.0', 1 );
 wp_localize_script('close_cookies', 'ajax_var', array(
 'url' => admin_url('admin-ajax.php'),
 'nonce' => wp_create_nonce('ajaxnonce')
 ));
}

add_action( 'wp_ajax_my_post_like', 'close_cookies' );
add_action( 'wp_ajax_nopriv_my_post_like', 'close_cookies' );

function close_cookies(){
$_SESSION["close_cookies"] = true;
setcookie("close_cookies", true, time() + 60, "/", "", "", TRUE);
echo '1';
}

HTML:

<div class="cookie-banner">
<span id="cookie-close" class="btn btn-white-outlines">Accept</span>
</div>

1 个答案:

答案 0 :(得分:0)

您需要在js文件中进行一些更改:

data: "action=close_cookies&nonce="+ajax_var.nonce, 

更改方式

data: {"action": "close_cookies", "nonce":ajax_var.nonce}, 

更改以下两行

add_action( 'wp_ajax_my_post_like', 'close_cookies' );
add_action( 'wp_ajax_nopriv_my_post_like', 'close_cookies' );

作者

add_action( 'wp_ajax_close_cookies', 'close_cookies' );
add_action( 'wp_ajax_nopriv_close_cookies', 'close_cookies' );

您收到该响应,因为ajax找不到要传递的动作。以上应该适合您。