使用 AJAX 时,表单的“动作”属性是不是无用?

Posted

技术标签:

【中文标题】使用 AJAX 时,表单的“动作”属性是不是无用?【英文标题】:Is a form's "action" attribute useless when using AJAX?使用 AJAX 时,表单的“动作”属性是否无用? 【发布时间】:2019-10-23 22:37:58 【问题描述】:

对于仅通过 AJAX 提交的表单,由于阻止了默认的 html 提交行为,设置 action 属性有什么好处吗?我还没有找到任何 AJAX 形式的说明页面说它可以省略,但我没有看到设置它的意义,所以我想我会问。如果 javascript 被禁用(这种情况变得越来越少见,而且我的代码在没有 JS 的情况下在其他方面毫无用处),它是否只是作为后备,还是我忽略了其他一些好处?

【问题讨论】:

我认为,正如你所说,这是一个历史性的后备。 AJAX 调用可能会使用 action 属性值,但这只是一个实现决策(可能不是一个好的决策)。我认为很少有 Web 开发人员可以编写一个无需 javascript 即可运行的非平凡 Web 应用程序。该技能似乎与可访问性(在大多数网站上完全被破坏)一样。 【参考方案1】:

如果您想支持回退行为,例如在 JavaScript 错误阻止 JS 提交的情况下,您将需要一个 action 属性。不过,您不一定需要它。

您可能需要它的一种情况是,如果您遵循“不显眼”的方法,该方法鼓励您在后端呈现表单时设置action,然后当您通过 JS (AJAX) 提交表单时,您使用action 的值作为请求的目标。

在任何情况下,即使通过 JavaScript 提交,您也总是希望在表单上设置 method;默认值为GET,这导致表单值在查询字符串中提交。当在没有 TLS 的情况下发出请求时,此信息会以明文形式传输,即使使用 TLS,它也会最终出现在缓存中,这可能导致信息被泄露(例如,来自共享计算机)。

【讨论】:

以上是关于使用 AJAX 时,表单的“动作”属性是不是无用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在表单提交时发送ajax请求而不影响实际表单

提交时设置表单的动作属性?

ajax

“动作”属性在“Angular”模板中不起作用

Djangoform表单Ajax控制跳转

.Net Core Ajax 表单提交不返回非绑定模型属性