既然大多数现代浏览器都支持AJAX和客户端请求而不执行POST,那么POST(表单帖子)的作用是什么?
当POST总是优先于XmlHttpRequest时是否存在情况或一般规则?
POST所做的就是在服务器头部放置变量键值对。 POST我可以想到的优点是大量的数据和移动浏览器。我还缺少许多其他人吗?
N.B。我知道你可以用AJAX调用执行POST,我主要是用<form>
标签来讨论
答案 0 :(得分:21)
这个问题有点棘手,因为它混淆了两个概念。第一个是POSTing,第二个是Ajax。与GETting相比,POST是一种具有不同实现和语义的不同HTTP方法。 Ajax或XmlHttpRequest在正常请求/导航中具有对应性。您可以对XmlHttpRequest和普通导航和表单提交使用POST或GET(好吧,POST始终是“表单提交”)。 XmlHttpRequest和普通请求之间的区别在于普通请求用新页面替换页面。
您可以编写任何仅使用Ajax获取数据和更改DOM的网站;这主要是Gmail的工作原理。传统意义上没有“表格提交”。但仍有GET和POST,因为服务器和浏览器对结果的解释不同。 GET应该是幂等的; POST适用于更改服务器状态的操作。例如,ecom事务应该是POST。使用Ajax时这不会改变,因为您希望代理服务器也理解这是一个POST,并且他们不应该尝试缓存响应。
使用GET和POST也有优点和缺点。您无法为POST结果添加书签,因为隐藏了参数。你不能用无限长度的参数值获取东西,因为IE只支持大约2000个字符。
使用Ajax和正常提交也有缺点;你不能将结果页面加入书签(因为页面没有改变);后退按钮将无法按预期工作。但是使用Ajax,您可以最大限度地减少传输的数据,并为页面提供方便的更新(例如监视长进程的状态),而不会产生烦人的闪烁或刷新。
总之,两种请求类型,Ajax和传统表单提交,都可以与GET和POST一起使用,每种请求都有利弊。这两种类型都不能完成另一种类型的所有操作,因此您可以期待在可预见的未来看到混合。
答案 1 :(得分:13)
由于安全限制,无法使用AJAX请求执行某些操作。例如,使用AJAX无法上传文件。
答案 2 :(得分:2)
如果您需要刷新整个页面,帖子可能会更容易。
答案 3 :(得分:1)
关键的区别在于表单的POST发送数据并且可以在到服务器的单次往返中导航到新的URL。 Ajax可以发送数据但无法导航到新页面。
答案 4 :(得分:0)
呃..张贴表格?
Post对于大表单非常有用,因为这些值隐藏在html标题中而没有添加到url字符串中?
答案 5 :(得分:0)
如果理论上,HTTP GET应该是幂等的信息请求:两个相同的GET应该返回完全相同的信息。
另一方面,HTTP POST用于保存状态和执行操作:两个相同的POST可能执行不同的操作,具体取决于执行操作的人员,之前执行的操作以及执行操作的时间。答案 6 :(得分:0)
我将用this video回答我自己的问题。我最近偶然发现了Doug Crockford。他描述了所有ajax和所有页面刷新之间的跷跷板。