2009-01-23 71 views
11

现在大多数现代浏览器都不支持AJAX和客户端请求而不执行POST,POST(表单发布)的作用是什么?POST与Ajax调用

当POST始终优先于XmlHttpRequest时,是否存在某些情况或一般规则?

POST所做的就是在服务器头中放置可变的键值对。我可以想到POST的优点是大量的数据和移动浏览器。还有很多我失踪的人吗?

N.B.我知道你可以使用AJAX调用来执行POST,我主要用<form>标签来说话

回答

19

这个问题有点棘手,因为它混淆了两个概念。第一个是发布,第二个是Ajax。与GETting相比,POSTing是具有不同实现和语义的不同HTTP方法。 Ajax或XmlHttpRequest在正常请求/导航中具有其对应物。你可以使用POST或者GET来获取XmlHttpRequest和正常的导航和表单提交(当然,POST始终是一个“表单提交”)。 XmlHttpRequest和普通请求的不同之处在于普通请求用新页面替换页面。

你可以写任何只使用Ajax获取数据和更改DOM的网站;这主要是Gmail的工作原理。传统意义上没有“表单提交”。但仍然有GET和POST,因为服务器和浏览器以不同的方式解释结果。 GET应该是幂等的; POST用于改变服务器状态的操作。例如,一个ecom交易应该是一个POST。这在使用Ajax时不会改变,因为您希望代理服务器也了解这是一个POST,并且他们不应该尝试缓存响应。

使用GET vs POST也有优点和缺点。您无法为POST的结果添加书签,因为这些参数是隐藏的。你无法获得无限长度的参数值,因为IE只支持大约2000个字符。

使用Ajax和正常提交也有缺点;你不能为结果页面添加书签(因为页面没有改变);后退按钮将无法按预期工作。但通过Ajax,您可以最小化传输的数据,并且还可以方便地更新页面(例如监视长过程的状态),而不会产生烦人的闪烁或刷新。

总之,Ajax和传统表单提交这两种请求类型都可以与GET和POST一起使用,每种请求类型都有优缺点。其他类型都无法做到其他任何事情,因此您可以预见在可预见的将来会出现混合。

2

如果你需要刷新整个页面,那么文章可能会更容易。

13

由于安全限制,某些操作无法使用AJAX请求执行。例如,上传文件不能用AJAX完成。

+0

我没有想到,好点。 – kemiller2002 2009-01-23 14:26:33

+2

如果在Ajax请求中检测到文件上载,jQuery将自动在内部创建一个iframe,并在iframe中创建一个表单,并形成POST。 – 2009-01-23 14:50:30

+3

即使如此,这仍然是一个POST,这是我的观点。 – Welbog 2009-01-23 15:28:53

1

关键的区别在于表单的POST发送数据,并且可以在到服务器的单次往返中导航到新的URL。 Ajax可以发送数据但不能导航到新页面。

0

呃..张贴表格?

由于这些值隐藏在html标题中,并且没有添加到url字符串中,所以对于大型表单来说,Post非常好用?

0

如果理论上,HTTP GET应该是对信息的幂等请求:两个相同的GET应该返回完全相同的信息。

另一方面,HTTP POSTs旨在保持状态并执行操作:两个完全相同的POST可能会根据执行操作的人员,执行的操作以及执行操作的时间执行不同的操作。

0

我会用this video来回答我自己的问题我最近偶然发现了Doug Crockford。他描述了所有ajax和所有页面刷新之间的跷跷板。