我创建了一个Vanilla JS Ajax处理程序,如下所示:
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
alert(this.responseText);
}
};
xhttp.open("POST", ajaxurl, true);
xhttp.send("action=lalala");
}
把这个放进主题里
functions.php 文件:
add_action(\'wp_ajax_lalala\', \'lalala_ajax_test\');
function lalala_ajax_test(){
$reponse = array(\'test\');
header("Content-Type: application/json");
echo json_encode($response);
exit();
}
我在浏览器控制台中看到:
POST https://example.com/wp-admin/admin-ajax.php 400 (Bad Request)
当我更改请求以获取时,如下所示:
xhttp.open("GET", \'/wp-admin/admin-ajax.php?action=lalala\', true);
xhttp.send();
它就像夏日的阳光。
因此,错误必须与action
在POST模式下执行请求时传递参数。
最合适的回答,由SO网友:Álvaro Franz 整理而成
嗯,这很可能会在某个时候帮助其他人,所以这里是这样的:
未将请求设置为application/x-www-form-urlencoded
使POST主体的行为类似于字符串。因此PHP无法识别$\\u POST变量。要做到这一点,我们需要:
xhttp.setRequestHeader(\'Content-type\', \'application/x-www-form-urlencoded\');
所以整个事情是这样的:
xhttp.open("POST", ajaxurl, true);
xhttp.setRequestHeader(\'Content-type\', \'application/x-www-form-urlencoded\');
xhttp.send("action=lalala");
然后它的行为符合预期。