Ajax POST请求和表单POST请求之间有什么区别?

6

在服务器端,例如,我使用Flask来处理这些POST请求,同一段代码可以处理两种类型的请求,但在客户端,Ajax请求不会让浏览器刷新整个页面,但表单会。 那么深层次的区别是什么呢?是某些标头字段不同吗?还是其他原因? 谢谢!


Ajax的概念是可以在不重新加载页面的情况下与服务器进行通信。(请参见https://www.w3schools.com/xml/ajax_intro.asp或https://developer.mozilla.org/en-US/docs/Web/Guide/ajax) - Cat
可能是Difference between jquery post and html form post的重复问题。 - Heretic Monkey
4个回答

7

并没有什么区别,只是AJAX正如其缩写所示是异步的,这意味着它不会阻塞其他任何正在运行的东西。表单和AJAX请求都发送POST请求,唯一的区别是浏览器使用表单的POST响应来加载新页面,而AJAX请求的响应则传递给JavaScript中的回调函数。


那么我能理解的区别是因为浏览器以不同的方式处理这两种类型的请求? - Xu Wang
@XuWang 是的,完全正确。 - dangee1705

2
提交HTML表单会构建一个HTTP请求,该请求按照HTML表单定义的规则进行格式化,并导致浏览器导航到它收到的响应。
使用JavaScript发出请求允许程序员构建更广泛的请求,包括添加自定义标头,以不同方式格式化数据(如JSON),并与HTML表单构建请求的方式相同,并导致响应通过JavaScript处理。
一般来说,在编写服务器端代码时,你不需要关心请求是来自JavaScript还是HTML表单。有一些情况需要,但通常只作为 XY问题
例如,您可能希望对常规表单提交做出HTML文档的响应(因为浏览器正在导航到它),但对Ajax请求做出JSON的响应(因为您希望轻松处理它)。在这种情况下,JavaScript应设置{{link2: Accept请求标头}},以告诉服务器它希望获得JSON响应。然后,您编写的服务器端代码应查看它以确定HTML或JSON是否被优先选择(而不用担心HTML或JSON被优先选择的原因)。

0

Ajax请求是异步后台发送的xhr请求,由您的JavaScript代码处理,而表单请求是普通请求,浏览器页面将重新加载,并由浏览器呈现响应。


一个XHR请求 - 或者fetch,或JSON,或者一个不可见的iframe hack等。 - Quentin

0

表单和Ajax请求以相同的方式发送到后端。对于Flask,您可以捕获POST请求,并且如果Ajax包含来自表单的所有相同信息,则它将是相同的。

提交表单(并导致页面刷新)的是表单触发到DOM的"onsubmit事件"。如果需要,实际上可以覆盖此操作。这通常使用"PreventDefault函数"完成。我认为这在网站上已经被多次涵盖了。您可能只是错过了表单中“onsubmit”事件的概念。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接