Невозможно построить объект FormData из существующей формы

Я пытаюсь создать объект FormData из формы на моей странице. Я получаю элемент формы следующим образом:

var form = document.forms['upload_form'];

И затем я создаю объект FormData следующим образом:

var fd = new FormData(form);

Поскольку вы не можете регистрировать значения в объекте FormData (как описано здесь), я Я отправляю данные формы в '/' только для того, чтобы увидеть их содержимое в моем Network Inspector. Содержимое полезной нагрузки запроса просто:

------WebKitFormBoundaryKAgAjii8IMLyJFcB--

и ничего больше! Если я вручную добавлю значение в форму следующим образом:

fd.append("username", "Groucho");

оно работает:

------WebKitFormBoundaryZikgEBo7sTzvlndC
Content-Disposition: form-data; name="username"

Groucho

Я также пытался выбрать элемент формы другими способами, например, с помощью jQuery:

var form = $(".upload_form");
var fd = new FormData(form[0]);

Независимо от того, как я выбираю элемент формы, переменная формы, безусловно, содержит форму (она не является нулевой или пустой), но создание объекта FormData с ним в качестве параметра просто не работает. Кто-нибудь может помочь?

PS Я использую Chrome 31.0.1650.57. Я также пробовал это в Safari 7.0 с теми же результатами.

Еще кое-что: входные данные в этой форме вложены в несколько элементов div. Может ли это быть проблемой?


person Andrew    schedule 17.11.2013    source источник
comment
Вы создаете свои FormData после того, как форма существует и была заполнена? Отправляет ли форма что-либо, если вы делаете это в чистом HTML?   -  person Paul S.    schedule 18.11.2013
comment
Да, я создаю FormData после того, как форма существует и заполнена. Форма ничего не отправляет в чистом HTML, так как это веб-приложение только для JavaScript, и я хочу отправить форму только с помощью AJAX. Поэтому в форме нет ни действия, ни метода, ни ввода для отправки.   -  person Andrew    schedule 18.11.2013


Ответы (1)


Это происходило из-за того, что у меня не были установлены атрибуты name для входных данных. Судя по всему, new FormData() и $.serialize() будут игнорировать любые входные данные без имен.

person Andrew    schedule 17.11.2013