使用POST数据和Axios时,admin-ajax.php不起作用

时间:2018-06-28 作者:Djave

我正在尝试创建一个带有AJAX请求的电子邮件注册表单。

早些时候,我发现Wordpress会清空$_POST 默认情况下为变量。我试过使用admin_postadmin_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请求可以缓存,保留在浏览器历史记录中

1 个回复
最合适的回答,由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中。

结束

相关推荐

Wp_ajax_工作正常,但wp_ajax_nopriv_返回的是HTML,而不是调用函数

我编写了一个简单的插件,可以在干净的安装上运行。它所做的一切就是,一旦加载了一个页面,它就会通过管理ajax请求一些ajax。然后将返回的数据输出到控制台。当我在网站上发布我正在工作的内容时,这并不是什么特别的事情,只是一些自定义的帖子类型,只有在我登录的情况下才能工作。当用户登录时,通过wp\\u ajax\\u test\\u ajax调用生成ajax输出test\\u ajax\\u process\\u request()的函数时,该函数工作正常,控制台显示从admin ajax加载的内容。php