这不是this等问题的重复,而是相反的:我有一个我通过jQuery提交的表单
$('<form>', {
action : 'service',
method : 'post',
target : '_blank'
}).append(
$('<input>', {
type : 'hidden',
name : 'payload',
value : JSON.stringify(payload)
})
).appendTo('body').submit().remove();
这样做是为了让我可以用HTML打开另一个页面。
由于我需要提交相当多的复杂信息,我实际上将它们全部序列化为一个大的JSON字符串,然后创建一个只有一个字段的表单(&#34;有效负载&#34;)并提交< EM>那
接收端有一个过滤器,如下所示:
因此,当GET数据增长太多时,我可以在不修改实际脚本的情况下切换方法,这通常没有任何变化。
它一直有效,直到今天。
服务器应该收到一个POST提交,并在弹出窗口中打开相应的响应。
服务器确实收到了正确的POST提交...
......显然忽略了它......
...并且 之后,浏览器发出了一个带有 no parameters 的GET,这是无参数GET得到的结果(请原谅双关语)显示在弹出窗口中。
毫不奇怪,这总是一个&#34;你没有提交任何参数&#34;错误。咄。
<FORM>
替换表单,不使用任何jQuery 。结果相同。所以,这不是一个jQuery问题。答案 0 :(得分:3)
使用hurl.it或Postman等工具手动向服务器发送请求。这些工具可以很好地显示来自服务器的响应,包括所有HTTP头。我怀疑服务器使用重定向(状态代码30X
)进行响应,这导致在GET
完成后发出POST
请求。
更新:HTTP重定向
HTTP重定向不一定使用相同的HTTP方法甚至相同的数据来向重定向目标发出请求。特别是对于非幂等请求,这可能是一个安全问题(您通常不希望您的表单提交自动重新提交到另一个地址)。但是,HTTP为您提供了两种选择:
[...]因此,HTTP / 1.1(RFC 2616)添加了新的状态代码303和307 [...],其中303强制要求将请求类型更改为GET,307保留最初发送的请求类型。尽管这种消歧提供了更大的清晰度,但302代码仍然在Web框架中使用,以保持与未实现HTTP / 1.1规范的浏览器的兼容性。
[来自Wikipedia: HTTP 302 ]
同样适用于301s:
如果收到301状态代码以响应GET或HEAD以外的任何类型的请求,客户端必须在重定向之前询问用户。
[来自Wikipedia: HTTP 301 ]