javascript - 如何使用 actions 在 React es6 和 axios 中发布数据

标签 javascript php reactjs post axios

我正在尝试使用 axios 发布数据。我可以让 api 调用工作,但我遇到的问题是在服务器端处理数据。 php 中正常的 $_POST 参数为空。

我有以下操作

export const UPDATE_CONTENT = 'update_content';

export function updateContent(values) {
    console.log(values);
    let obj = {};
    obj['params'] = values;
    console.log(obj);
    const request = axios.post(`/api/admin/rename/content/management/format/json`,JSON.stringify(values));
    return {
        type: UPDATE_CONTENT,
        payload: request
    };
}

values 是一个键值对象

{content : "<p>html text</p>",id:"21"}

当我发布使用像 axios.post(url,values); 时,请求参数显示为有效负载,$_POST服务器端是空的。

当我使用 JSON.stringify 时,$_POST 不为空,但它不会在请求中作为正确的键值对发送。我得到以下内容

Array
(
    [{"id":"21","content":"<p>html text</p>"}
)

所以在服务器端我必须做 $_POST = json_decode(file_get_contents('php://input'), true);

我该如何解决这个问题,这样我就不必这样做 $_POST = json_decode(file_get_contents('php://input'), true);

最佳答案

默认情况下,axios 将 JavaScript 对象序列化为 JSON,因此只能使用 file_get_contents("php: 从 "php://input" 读取它。//输入”)。检查documentation

如果您想避免这种情况,可以以 application/x-www-form-urlencoded 格式发送数据

您可以使用 URLSearchParams 来完成此操作,例如

var params = new URLSearchParams();
params.append('content', '<p>html text</p>');
params.append('id', '21');
axios.post(`/api/admin/rename/content/management/format/json`,params);

或者您可以使用 querystring模块如下:

var querystring = require('querystring');
axios.post('/api/admin/rename/content/management/format/json', querystring.stringify({"id":"21","content":"<p>html text</p>"}));

但是,修复此问题后,您将需要在客户端的操作创建器中处理异步操作。请参阅Handling async request with React, Redux and Axios?为了解决这个问题

关于javascript - 如何使用 actions 在 React es6 和 axios 中发布数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48542884/

相关文章:

javascript - 应用于 Apple IOS 设备上输入的不可见边框

javascript - 从javascript中的字符串中提取访问 token

javascript - 如何提交 semantic-ui-react Search 值?

c# - asp gridview 每第二列的样式

javascript - element.children 的 console.log 显示长度为 0,但稍后展开时有 3 个条目

javascript - 检查提交时是否选中所有复选框

php - 按 seriq asc 排序显示错误结果

php - 我可以只使用 _(下划线)作为类(class)名称吗?

javascript - 在运行时更改使用 Three.js 创建的 3D 立方体的宽度/高度/长度

PHP继承的父方法无法访问 child 的私有(private)属性(property)