将 fetch 与方法 post 结合使用

Using fetch with method post

我有一个使用

的 phonegap 应用程序
$.ajax(
  type: 'POST,
  dataType:"json",
  url: 'test.com'
  data: { mail: 'bob@test.com' }
)

我在我的 glassfish 服务器上做了类似

的事情
HttpServletRequest request;
request.getParameter('mail');

我正在将我的应用程序移动到 React Native,所以我正在做

fetch('test.com', {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ mail: 'bob@test.com' }),
})

但这不起作用,我的 glassfish 服务器没有获取我的参数。 我应该怎么做 ? 不用说,我不想在服务器端进行更改!

在您的第一个示例中(使用 $.ajax())您没有发送 JSON 正文。您实际上是在发送查询字符串。在您的反应示例中,您正在发送一个 JSON 主体,您的服务器需要以不同方式处理它。

您将需要更改您的服务器处理程序以实际接受 JSON,或者您将必须发送带有反应的查询字符串,类似于:

fetch('test.com', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  },
  body: $.param({ mail: 'bob@test.com' }),
})

如果您无法访问 jQuery,您将无法使用 $.param()。对于此特定示例,您要发送的查询字符串为

body: "mail=bob@test.com"

序列化查询字符串的数据并创建一个函数非常简单。

附带说明一下,为了通过 $.ajax() 调用发送 JSON 正文,您需要执行以下操作:

$.ajax(
  type: 'POST,
  dataType:"json",
  url: 'test.com'
  data: { mail: 'bob@test.com' }
  contentType: "application/json",
)

注意 contentType 参数,它实际上告诉 jQuery 如何格式化请求的正文