我正在尝试创建一个带有AJAX请求的电子邮件注册表单。
早些时候,我发现Wordpress会清空$_POST
默认情况下为变量。我试过使用admin_post
和admin_post_nopriv
但这两种方法似乎都不起作用。我现在正在尝试以下操作:
add_action(\'wp_ajax_nopriv_newsletter\', \'subscribeToNewsletter\');
add_action(\'wp_ajax_newsletter\', \'subscribeToNewsletter\');
function subscribeToNewsletter()
{
echo json_encode([ \'success\' => true ]);
在JavaScript中,如果我使用以下内容:
axios
.post(\'/wp-admin/admin-ajax.php\', {
\'email\' : \'[email protected]\',
\'action\' : \'newsletter\',
})
.then(response => {
console.log(response.data);
});
我收到400个错误请求
0
已返回。如果我将其更改为:
axios
.get(\'/wp-admin/[email protected]&action=newsletter\')
.then(response => {
console.log(response.data);
});
一切正常。
可以admin-ajax.php
不处理POST
请求?我不想使用GET
请求*为某人订阅新闻稿,我想通过AJAX来完成。
<小时>
*From W3 schools (which normally I hate but has a good overview on requests):
关于GET请求的其他注意事项:
GET请求可以缓存,保留在浏览器历史记录中
最合适的回答,由SO网友:Jacob Peattie 整理而成
我认为,这里的问题是axios如何工作。不是WordPress。但是你想在这里使用POST请求是完全正确的。
默认情况下,我相信axios会在POST请求中以JSON的形式发送数据。要在PHP中的请求体中获取JSON,您需要这样做(从here):
$inputJSON = file_get_contents(\'php://input\');
$input = json_decode($inputJSON, TRUE); //convert JSON into array
问题是
wp_ajax_
挂钩工作,WordPress在
$_REQUEST[\'action\']
. 如果操作名称是请求正文的一部分,则不会设置该名称,因为
$_REQUEST
数据作为JSON发送时未填充。
我相信,如果您想以表单的方式在axios中发送POST数据,并使用$_POST
或$_REQUEST
, 那么您需要将其作为FormData
在脚本中:
var data = new FormData();
data.append(\'email\', \'[email protected]\');
data.append(\'action\', \'newsletter\');
axios
.post(\'/wp-admin/admin-ajax.php\', data)
.then(response => {
console.log(response.data);
});
PS:请注意,以下语法:
response => {
,
won\'t work 在任何版本的IE中。