【问题标题】:Using fetch with method post将 fetch 与方法 post 一起使用
【发布时间】:2017-03-24 15:34:04
【问题描述】:

我有一个使用

的 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 服务器没有获取我的参数。 我应该怎么做 ? 不用说我不想在服务器端进行更改!

【问题讨论】:

  • 当它失败时,你在客户端看到什么错误信息?
  • 我在客户端没有任何错误消息。就是那个 request.getParameter('mail');在我的服务器端为空。

标签: ajax react-native fetch


【解决方案1】:

在您的第一个示例中(使用$.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"

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

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

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

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

【讨论】:

  • 不幸的是我已经测试过但它不起作用... request.getParameter('mail');仍然为空
  • 我还是卡住了,你知道为什么这不起作用吗?我可以尝试什么?
  • 你有办法查看服务器上请求的原始值吗?那将是下一步。
  • 呼啦,我搞定了。我将 'Content-Type' 的值更改为 'application/x-www-form-urlencoded' 我认为您的答案值得编辑一下,因为 ajax 可能根本不会发送纯文本。我让你编辑你的答案,因为你更熟悉这个。感谢您为我指明了正确的方向!
  • 你是对的,我犯了一个愚蠢的错误。答案已编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 2019-03-14
  • 2017-11-25
  • 1970-01-01
  • 2017-09-29
  • 2018-05-15
相关资源
最近更新 更多