2012-05-08 64 views
38

当我在send()方法中发送AJAX Post请求并在queryString中发送参数时,Chrome Developer Tool的XHR捕获工具显示了请求有效负载下的参数。当我使用jquery的post功能时, 该工具在Form Data部分显示参数。表单数据和请求负载之间有什么区别?

有什么区别?

+1

对于未来的读者关注这一点:http://stackoverflow.com/questions/9597052/how-to-retrieve-request-payload –

回答

27

你没有提供如何使用发送功能足够的信息,但我认为你不设置MIME类型来指定要发送表单数据

xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 

发送的数据是在这种情况下,编码为你编码查询字符串

xhr.send("name=foo&value=bar"); 

否则它不会被开发人员工具解释为表单数据。

jquery在这方面为你做了大部分工作。

更新:要回答明确的区别是什么?

  • 如果一个请求(通常是POST)具有Content-type头设置为application/x-www-form-urlencoded体预计将在一个标准的形式使用url编码的查询字符串密钥=对由&加入。 表格数据部分然后显示键值参数(当查看被解析​​时)。这种方式在过去更为常见,因为它是HTML表单的默认设置。

  • 其他情况显示在请求有效负载部分(现在为解析可读性以及JSON等常见格式进行了解析)。

+1

游客需要注意的是,'xhr.setRequestHeader()'调用应放置*在* xhr.open()'调用和'xhr.send()'调用之间。否则,你会得到一个DOM异常错误。 – Martin

+8

它没有回答“表单数据和请求有效载荷之间有什么区别?”的问题,只是说如何获得一个或另一个。 – Medorator

相关问题