如何 post 数据在 es6 中与 axios 使用动作反应

how to post data in react es6 with axios using actions

我正在尝试使用 axios post 数据。我可以让 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"}

当我post像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://input")"php://input" 中读取它。检查 documentation

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

你可以使用 URLSearchParams like

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>"}));

然而,在修复此问题后,您将需要在客户端的动作创建器中处理异步动作。请参阅 以解决该问题