400将XHR从React.js发送到admin-ajax.php时出现错误请求

时间:2019-07-13 作者:Sean D

我正在尝试从React发送ajax请求。wordpress的管理ajax的js应用程序。php。下面是我编写的一个小型测试插件,用于测试:

// plugins folder > xhrLink/xhrLink.php
<?php

/*
Plugin Name: Xhr Link
*/

function basicPage() {
  echo "<h1>Admin Page</h1>";
}

function setupParams() {
  add_options_page(\'XHR Link\', \'XHR Link\', \'manage_options\', \'xhr-link\',  \'basicPage\');
}
add_action(\'admin_menu\', \'setupParams\');


function handleXhrLink() {
  wp_send_json(\'this response came from the back end\');
}
add_action(\'wp_ajax_xhrLink\', \'handleXhrLink\');


// theme folder > functions.php
function add_cors_http_header() {
  header("Access-Control-Allow-Origin: *");
}
add_action(\'init\',\'add_cors_http_header\');
在React中。js app I将以下函数设置为在按钮的onClick属性上启动:

const sendXhrLinkRequest = () => {
      let form_data = new FormData;
      form_data.append(\'action\', \'xhrLink\');

      axios
        .post(\'http://localhost/wptest2/wp-admin/admin-ajax.php\', form_data)
        .then(response => {
          console.log(response, `=====sendXhrLinkRequest response=====`);
      });

  };
发件人WordPress AJAX with Axios:

FormData接口提供了一种方法,可以轻松构建一组表示表单字段及其值的键/值对,然后可以使用XMLHttpRequest轻松发送这些键/值对。send()方法。如果编码类型设置为“多部分/表单数据”,则它使用与表单相同的格式。

单击按钮后,Chrome控制台显示以下内容:

VM596:1 POST http://localhost/wptest2/wp-admin/admin-ajax.php 400 (Bad Request)
(anonymous) @ VM596:1

VM596:1 XHR failed loading: POST "http://localhost/wptest2/wp-admin/admin-ajax.php".

createError.js:16 Uncaught (in promise) Error: Request failed with status code 400
    at createError (createError.js:16)
    at settle (settle.js:17)
    at XMLHttpRequest.handleLoad (xhr.js:59)
有人知道这些错误的原因以及如何处理吗?

还尝试了:

将表单数据作为JSON对象提交。产生了相同的控制台条目

1 个回复
SO网友:Sean D

通过添加操作来处理未经身份验证的用户来解决:

add_action(\'wp_ajax_nopriv_xhrLink\', \'handleXhrLink\');

相关推荐

WordPress管理员AJAX Trash_Comment

当有人从wp管理员删除评论时,我试图添加一个trash\\u原因。我设法添加了一个带有dropbown的thickbox,列出了删除原因,并在垃圾链接的query\\u字符串中传递/更新了selected选项的值,但我在add\\u操作中无法获得它这是我的代码:add_filter(\'comment_row_actions\', \'filter_comments_actions\', 1, 2); function filter_comments_actions($actions, $comm