[英]Wordpress admin ajax.php 400 bad request
原来,我正在制作一个Wordpress插件,需要在其中创建一个AJAX到Wordpress的文件“ admin_ajax.php”,但是在发送请求时,客户端会给我错误400(错误请求),但我没有了解是什么原因。
捕获
https://i.stack.imgur.com/5SiDd.png
https://i.stack.imgur.com/tPD6o.png
使用Javascript:
$.post(window.dibibot.ajax_uri, {
action: "dibibot_check_message_read",
to: (window.dibibot.USER_KEYS.split(":")[1]).toString(),
message_id: JSON.stringify(data.message)
}, function(response) {
console.log(response);
});
Ajax php函数:
<?php
function dibibot_check_message_read() {
global $wpdb;
$conversation_guid = $_POST['to'];
$message_id = json_decode($_POST['message_id'], true);
$conversation = $wpdb->get_var("SELECT metadata FROM " . $wpdb->prefix . "dibibot_conversations WHERE guid = '".$conversation_guid."'");
$conversation = maybe_unserialize($conversation);
for ($j=0; $j < count($message_id) ; $j++) {
for ($i=0; $i < count($conversation); $i++) {
if($conversation[$i]['id'] == $message_id[$j]) {
$conversation[$i]['status'] = 2;
break;
}
}
}
$result = $wpdb->update($wpdb->prefix . 'dibibot_conversations', [ "metadata" => maybe_serialize($conversation) ], [ "guid" => $conversation_guid]);
echo $result ? 1 : 0;
wp_die();
}
?>
该代码注册了您的Ajax处理程序,但是当您仅在wp_enqueue_scripts上运行它时,已经为时已晚,并且wp_ajax_nopriv_挂钩已经运行。
进一步了解Wordpress Ajax:
https://codex.wordpress.org/AJAX_in_Plugins https://developer.wordpress.org/plugins/javascript/ajax/
如果您由于收到400错误(错误请求)而在此处结束,则可能是由于用户未登录时发出了AJAX请求。
您必须更改您的代码
wp_ajax_my_action', 'my_action' );
至
wp_ajax_nopriv_my_action', 'my_action' );
也许它可以帮助其他人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.