使用POST请求但不使用GET请求时出现AJAX Call 400错误请求

时间:2021-02-20 作者:Álvaro Franz

我创建了一个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模式下执行请求时传递参数。

1 个回复
最合适的回答,由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");
然后它的行为符合预期。

相关推荐

AJAX jQuery POST前端返回加载资源失败状态400

我为前端题库/测验创建了一个自定义帖子模板,其中有两个元素:当按下按钮时,显示问题文本的div将触发ajax查询,以从数据库中获取下一个问题Code in functions.php//Load ajax object for question bank add_action(\'wp_enqueue_scripts\', \'my_enqueue\'); function my_enqueue(){ wp_enqueue_script( "question-re