[axios]我的端点没有从帖子接收数据参数

2024-05-15 71 views
2

我有一个现有的表单端点,该端点在通过标准 ajax/jQuery 调用提交时可以工作,但是当我使用 Axios 发布到它时,该端点没有从 data 属性接收任何数据。

我正在发布到同一服务器上的文件,而不是 CORS。

我在 URL 中输入的任何内容都会按预期到达端点。

export function selectSubscription(data){
    const url = '/remoting/credits.cfc';
    let params = {};
    const requiredFields = [
        'PRODUCT_PACKAGE_ID', 
        'REPLENISH_PACKAGE_ID', 
        'REPLENISH_THRESHOLD',
        'SCHOOL_SUBSCRIPTION_ID'
    ];
    let validFormData = jsonHasFields(data, requiredFields);

    if (!validFormData.success) {
        return {
            type: 'INVALID_FORM',
            keys: validFormData.keys
        }
    }
    params.method = 'selectSubscription';
    for (let i=0; i < requiredFields.length; i++) {
        let key = requiredFields[i];
        params[key] = data[key];
    }

    //const request = axios.post(url, params); 
    const request = axios({
        method: 'post',
        url: url,
        data: params
    })
    //$.post(url, params, function(result){debugger;});
    return {
        type: 'SELECT_SUBSCRIPTION',
        payload: request
    }
}

回答

5

您在 Chrome 开发工具网络面板中看到任何传出请求吗?

8

是的,我早上会得到一个屏幕截图。返回的响应是发送的数据中缺少后置变量的错误消息。

4

这似乎与#302有关

5

@mzabriskie 听起来确实很相似。

抱歉耽搁了。这是我的网络检查员的一些屏幕截图。我只调用了一次 actioncreator 和 axios,但它发送了两个帖子。第二个是得到 302,但同样,如果我将其更改为标准 jQuery ajax 帖子,则一切正常。

轴1

轴2

3

@phantom42 第一个请求有可能是通过 jQuery 发送的吗?我问这个的原因是 jQuery 默认使用 x-www-form-urlencoded 格式,而 axios 默认将对象序列化为 JSON。 (如果$.post(url, params, function(result){ ... })该行未注释,则可能会发生这种情况。)

5

不,我只是将注释行添加到示例中,这样我就可以准确地引用我如何通过 jQuery 成功发送数据。我已将其从正在运行的代码中完全删除。

8

如果我使用 jQuery POST,这就是我在网络选项卡中看到的内容。只需建立一个连接,所有数据都会正确发布。

jQueryPost

0

好吧,我认为额外的帖子一定与 redux-logger 有关,我昨天删除了它,现在我只收到单个帖子,导致 302 和有效负载未正确提交。

6

看起来您的端点期望数据采用 x-www-form-urlencoded 格式,而 axios 默认情况下以 JSON 格式发送数据。 axios 目前不支持 x-www-form-urlencoded 格式(请参阅#97),但很快就会支持。同时,您可以执行以下操作:

axios({
  method: 'post',
  url: url,
  data: 'param1=value1&param2=value2' // Note: values need to be properly encoded
})

希望这可以帮助!

3

该死。有预期的时间表吗?我们有一些表单的 url 字符串数据过多。不过,这对于我现在的具体问题来说应该是短期有效的。

4

您的数据不会作为查询字符串参数发送。它将在请求正文中发送。

至于时间线,我希望我们能在下周末之前添加对 x-www-form-urlencoded 格式的支持。

3

这两方面都很棒。非常感谢。

9

axios v0.12.0 支持 x-www-form-urlencoded。请看这个评论