Ajax 使用fetch和post方法

Ajax 使用fetch和post方法,ajax,react-native,fetch,Ajax,React Native,Fetch,我有一个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', { meth

我有一个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
正文。实际上,您正在发送一个查询字符串。在react示例中,您发送的是一个
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
如何格式化请求的正文

在第一个示例中(使用
$.ajax()
),您没有发送
JSON
正文。实际上,您正在发送一个查询字符串。在react示例中,您发送的是一个
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
当请求失败时如何格式化请求体

,您在客户端看到了哪些错误消息?我在客户端没有任何错误消息。就是那个请求。getParameter('mail');在我的服务器端为空。当它失败时,您在客户端看到什么错误消息?我在客户端没有任何错误消息。就是那个请求。getParameter('mail');在我的服务器端为空。不幸的是,我已经测试过了,它不工作。。。request.getParameter('mail');还是空的我还是被卡住了,你知道为什么这样不行吗?我可以尝试什么?您有办法查看服务器上请求的原始值吗?那将是下一步。呼啦,我成功了。我将“Content Type”的值改为“application/x-www-form-urlencoded”,我认为您的答案值得编辑一下,因为ajax可能根本不发送纯文本。我让你编辑你的答案,因为你更熟悉这个。谢谢你给我指明了正确的方向!你说得对,我犯了个愚蠢的错误。答案已编辑。不幸的是,我已经测试过了,但它不起作用。。。request.getParameter('mail');还是空的我还是被卡住了,你知道为什么这样不行吗?我可以尝试什么?您有办法查看服务器上请求的原始值吗?那将是下一步。呼啦,我成功了。我将“Content Type”的值改为“application/x-www-form-urlencoded”,我认为您的答案值得编辑一下,因为ajax可能根本不发送纯文本。我让你编辑你的答案,因为你更熟悉这个。谢谢你给我指明了正确的方向!你说得对,我犯了个愚蠢的错误。答案已编辑。