将jQuery.ajax帖子重写为fetch

时间:2015-09-08 09:41:06

标签: javascript jquery ajax fetch

我有一个服务,它异步调用REST API。我有一个jQuery,它按预期工作,但我想用JS fetch重写它。但是,它似乎没有将正确的数据发布到服务器。我从服务器得到的所有回复都是"缺少参数:userId"

以下是我的工作jQuery:

$.ajax({
  url: 'http:/myservice.com/users/delete',
  data: { userId: myVar },
  type:'post',
  success: function(response) {
    console.log(response);
  }
});

我认为代码很简单:

fetch('http:/myservice.com/users/delete', {
  method: 'post',
  body: { userId: myVar }
}).then(function(response) {
   return response.text()
});

如果我查看原始代码中的XHR请求,它实际上会发布表单数据。所以我试着改写:

fetch('http:/myservice.com/users/delete', {
  method: 'post',
  body: new FormData({ userId: myVar })
}).then(function(response) {
   return response.text()
});

我还尝试了其他代码变体,例如将其作为硬编码字符串(userId=1337)或使用JSON.stringify发送。

我做错了什么?我不理解正确获取吗?还有什么我可以做的调试吗?

1 个答案:

答案 0 :(得分:1)

建立身体确实需要一些修补。

请尝试以下代码:

var serialize = function (data) {
    return Object.keys(data).map(function (keyName) {
        return encodeURIComponent(keyName) + '=' + encodeURIComponent(data[keyName])
    }).join('&');
};

fetch('http:/myservice.com/users/delete', {
  method: 'post',
  body: serialize({ userId: myVar })
}).then(function(response) {
   return response.text()
});