使用fetch with method post

时间:2017-03-24 15:34:05

标签: ajax react-native fetch

我有一个使用

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

我在我的glassfish服务器上执行类似

的操作
HttpServletRequest request;
request.getParameter('mail');

我正在以原生方式移动我的应用程序,所以我正在做

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

但是这不起作用,我的glassfish服务器没有得到我的参数。 我应该怎么做 ? 不言而喻,我不想在服务器端进行更改!

1 个答案:

答案 0 :(得分:2)

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

您需要更改服务器处理程序以实际接受JSON,否则您将需要发送带有react的查询字符串,如下所示:

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"

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

作为旁注,为了通过JSON电话发送$.ajax()正文,您可能希望执行以下操作:

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

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