javascript - 如何使用 javascript 正确发布 x-www-form-urlencoded 数据?

标签 javascript

<分区>

我已经编写了一个 JS 函数来将 categoryId 和 shopId 以及 page:0 发布到一个 api,这是我的函数:-

 getInsideMenu(categoryid,shopid){
        var formBody = [];
        var details={
             'categoryId':categoryid,
             'shopId':shopid ,
             'page':'0'
        };
        for (var property in details) {
              var encodedKey = encodeURIComponent(property);
              var encodedValue = encodeURIComponent(details[property]);
              formBody.push(encodedKey + "=" + encodedValue);
        }
                return fetch(
            `${serverAddress}/api/shopProducts`,
            {
                method: 'POST',
                body: formBody,
                headers: {
                   'Content-Type': 'application/x-www-form-urlencoded'
                }
            }
        ).then((res)=>(res.json()))
    },

但是我得到的是 null 。我想这个函数没有正确定义。可以做些什么来修复它。它在 POSTMAN 中运行良好。 [![这是我在 postman 中发送的方式][1]][1]

最佳答案

您正在构建一个编码名称/值对数组,并将其作为 POST 的 body 直接传递。但是fetch不接受该参数中的数组。

对代码的最小改动是使用 & 作为分隔符加入数组:

return fetch(
    `${serverAddress}/api/shopProducts`,
    {
        method: 'POST',
        body: formBody.join("&"), // <===== here
        headers: {
           'Content-Type': 'application/x-www-form-urlencoded'
        }
    }
). /* etc */

或者,使用 FormData ,因为这正是它的用途::-)

getInsideMenu(categoryid,shopid){
    var formBody = new FormData();
    formBody.set("categoryId", categoryid);
    formBody.set("shopId", shopid);
    formBody.set("page", "0");
    return fetch(
        `${serverAddress}/api/shopProducts`,
        {
            method: 'POST',
            body: formBody,
            headers: {
               'Content-Type': 'application/x-www-form-urlencoded'
            }
        }
    ).then((res)=>(res.json()));
}

(根据您的需要,您可以使用 setappend 。以上使用 set。)


旁注 1:

这一行:

).then((res)=>(res.json()));

...不需要大部分 ():

).then(res => res.json());

旁注 2:

不要忘记检查是否成功;不这样做是使用 fetch 时常见的错误。 fetch 不会拒绝 HTTP 错误(如 404 或 500)。如果你想拒绝 HTTP 错误,你必须自己做:

return fetch(/*...*/)
    .then(res => {
        if (!res.ok) {
            throw new Error(res.status);
        }
        return res;
    })
    .then(res => res.json());

关于javascript - 如何使用 javascript 正确发布 x-www-form-urlencoded 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50677081/

相关文章:

javascript - 如何在nodejs中将数字格式化为指定长度

javascript - Zapier 重新格式化 Get Fetch 响应

javascript: selectize 默认选择第一项

javascript - (开源)JavaScript 原型(prototype) OO 示例

javascript - 检查何时创建新元素

javascript - ReactJS 中的搜索和页面

javascript - 如何在 JavaScript 中编写返回错误的函数

javascript - 如何使用javascript根据数组中的键进行过滤?

javascript - 导入 BSON 文档、MongoDB 时出错

javascript - 哪个更快更好?声明一个新变量或只是分配给全局变量?