我正在try 使用fetch发布一个JSON对象.

根据我的理解,我需要在请求正文中附加一个字符串对象,例如:

fetch("/echo/json/",
{
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
    method: "POST",
    body: JSON.stringify({a: 1, b: 2})
})
.then(function(res){ console.log(res) })
.catch(function(res){ console.log(res) })

当使用jsfiddle's JSON echo时,我希望看到我发回的对象({a: 1, b: 2}),但这并没有发生——chrome devtools甚至没有将JSON显示为请求的一部分,这意味着它没有被发送.

推荐答案

对于ES2017 async/await support,以下是如何使用JSON有效负载:

(async () => {
  const rawResponse = await fetch('https://httpbin.org/post', {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({a: 1, b: 'Textual content'})
  });
  const content = await rawResponse.json();

  console.log(content);
})();

不能使用ES2017吗?参见@vp_art's answer using promises

但是,该问题是由a long since fixed chrome bug.引起的问题
最初的答案如下.

chrome devtools甚至没有在请求中显示JSON

This is the real issue here,它是bug with chrome devtools,固定在Chrome46上.

这段代码运行良好——它正确地发布了JSON,只是看不见而已.

我希望能看到我送回的东西

这不起作用,因为这不是correct format for JSfiddle's echo.

correct code名是:

var payload = {
    a: 1,
    b: 2
};

var data = new FormData();
data.append( "json", JSON.stringify( payload ) );

fetch("/echo/json/",
{
    method: "POST",
    body: data
})
.then(function(res){ return res.json(); })
.then(function(data){ alert( JSON.stringify( data ) ) })

对于接受JSON有效载荷的端点,the original code is correct

Javascript相关问答推荐

用相器进行向内碰撞检测

如何访问react路由v6加载器函数中的查询参数/搜索参数

JS生成具有给定数字和幻灯片计数的数组子集

当promise 在拒绝处理程序被锁定之前被拒绝时,为什么我们会得到未捕获的错误?

当点击注册页面上的注册按钮时,邮箱重复

cypress中e2e测试上的Click()事件在Switch Element Plus组件上使用时不起作用

使用Promise.All并发解决时,每个promise 的线性时间增加?

检索相加到点的子项

为什么客户端没有收到来自服务器的响应消息?

如何在DYGRAPS中更改鼠标事件和键盘输入

AddEventListner,按键事件不工作

在D3条形图中对具有相同X值的多条记录进行分组

将嵌套数组的元素乘以其深度,输出一个和

基于产品ID更新条带产品图像的JavaScript命中错误

FindByIdAndUpdate在嵌套对象中创建_id

在Puppeteer中使用promise进行日志(log)记录时出现TargetCloseError

正则表达式以确定给定文本是否不只包含邮箱字符串

扩散运算符未按预期工作,引发语法错误

如何为两条动态路由创建一个页面?

如果未定义,如何添加全局变量