[英]Wordpress Plugin Development admin-ajax.php 400 (Bad Request)
[英]Wordpress Admin Ajax 400 (Bad Request)
我使用過 Wordpress Admin Ajax,控制台顯示 400(錯誤請求)
jQuery('#submitid').click(function(e){
e.preventDefault();
//var newCustomerForm = jQuery(this).serialize();
jQuery.ajax({
type: "POST",
url: "wp-admin/admin-ajax.php",
data: {status: 'status', name: 'name'},
success:function(data){
jQuery("#result").html(data);
}
});
});
Wordpress AJAX 過程有一些基本要點,如果您希望它正常工作,應遵循這些要點:
1.在functions.php中添加你想從前端調用的動作:
function logged_in_action_name() {
// your action if user is logged in
}
function not_logged_in_action_name() {
// your action if user is NOT logged in
}
add_action( 'wp_ajax_logged_in_action_name', 'logged_in_action_name' );
add_action( 'wp_ajax_nopriv_not_logged_in_action_name', 'not_logged_in_action_name' );
2.在functions.php中注冊本地化對象
// Register the script
wp_register_script( 'some_handle', 'path/to/myscript.js' );
// Localize the script with new data
$some_object = array(
'ajax_url' => admin_url( 'admin-ajax.php' )
);
wp_localize_script( 'some_handle', 'ajax_object', $some_object );
// Enqueued script with localized data.
wp_enqueue_script( 'some_handle' );
3.在前端創建AJAX請求
// source: https://codex.wordpress.org/AJAX_in_Plugins
var data = {
'action': 'not_logged_in_action_name',
'whatever': 1234
};
jQuery.post( ajax_object.ajax_url, data, function( response ) {
console.log( response );
}
首先你不應該自己寫網址。 您可以使用 localize 函數將 url 添加到您的 javascript 文件中:
wp_enqueue_script('myHandle','pathToJS');
wp_localize_script(
'myHandle',
'ajax_obj',
array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) )
);
在此之后,您可以在腳本中使用ajax_obj.ajax_url
來接收 url。
其次,你是否實現了正確的鈎子?
// Only accessible by logged in users
add_action( 'wp_ajax_my_action', 'my_action_callback' );
// Accessible by all visitors
add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );
此致
所有 Wordpress Ajax 調用都必須具有指向鈎子wp_ajax_{action_param}
或wp_ajax_nopriv_{action_param}
action
參數,然后您從該鈎子跳轉到函數。
來自法典:
add_action( 'wp_ajax_my_action', 'my_action' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action' );
function my_action() {
$status = $_POST['status'];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.