Оповещение об определенном элементе в [object FormData] (для тестирования)

Я пытаюсь увидеть, какой контент содержится внутри [object FormData] и, в частности, внутри определенного элемента, имя которого должно быть Name. Я хотел бы предупредить его, чтобы проверить правильность содержимого, но при этом возвращается undefined:

    alert(fd['Name']);

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

Оповещение PS только fd возвращает [object FormData]


person don    schedule 01.12.2012    source источник
comment
Покажите больше кода, а также ваш HTML.   -  person I Hate Lazy    schedule 01.12.2012


Ответы (3)


IvanZh сообщил мне, что этот подход не работает для него, что побудило меня провести небольшое исследование объекта HTML5 FormData. Как оказалось, я был совершенно неправ в этом (см. Старый неверный ответ ниже). Все данные для FormData находятся в собственном коде. Это означает, что браузер обрабатывает данные для полей формы и загрузки файлов на языке его реализации.

Цитирование MDN:

Примечание. ... Объекты FormData не являются строковыми объектами. Если вы хотите преобразовать отправленные данные в строку, используйте предыдущий пример чистого AJAX. Также обратите внимание, что хотя в этом примере есть несколько файловых полей, при отправке формы через API FormData вам не нужно также использовать API FileReader: файлы загружаются и загружаются автоматически.

Невозможно представить эту информацию в JavaScript, поэтому мое наивное предложение просто сериализовать ее как JSON не сработает (что заставляет меня задаться вопросом, почему этот ответ был принят в первую очередь).

В зависимости от того, чего вы пытаетесь достичь (например, если вы только пытаетесь выполнить отладку), может оказаться возможным просто передать эту информацию серверному сценарию, который возвращает соответствующие метаданные JSON. В PHP, например, вы можете отправить свои FormData на analyzeForm.php, который может легко получить доступ ко всему, что вы прикрепили к FormData по соответствующему запросу superglobal. Скрипт переварит содержимое вашей формы и вернет соответствующую информацию в удобном для анализа JSON. Это очень неэффективно, поэтому, вероятно, не подходит для производственных сред, но хоть что-то.

Старый неверный ответ:

Вы можете попробовать использовать:

alert(JSON.stringify(fd));

для просмотра текстового представления структуры fd.

Вы также можете использовать console.log, но это нестандартная функция, и ее наличие во всех браузерах не гарантируется.

person Asad Saeeduddin    schedule 01.12.2012
comment
Я не смог повторить ваш подход в FF и Chrome. Я просто получаю пустой объект: '{}' - person IvanZh; 02.04.2014
comment
@IvanZh Это потому, что ваш объект пуст. Пустой объект сериализуется в {}, вот что вы видите. - person Asad Saeeduddin; 02.04.2014
comment
может я что-то не так делаю? Пожалуйста, посмотрите на это или запустите в консоли браузера: var fd = new FormData; fd.append('test', 123); alert(JSON.stringify(fd)) - person IvanZh; 03.04.2014
comment
@IvanZh На самом деле, я провел небольшое исследование и совершенно ошибся в этом. Пожалуйста, смотрите обновленный ответ. - person Asad Saeeduddin; 04.04.2014

Пользователь Spokey познакомил меня с этой техникой, используя jsFiddle здесь, который был очень удобен в возможности "видеть" значения в formData объект, основная логика которого:

function submitFormFunction() {
//create formData object
var myFormData = new FormData();
// get the values from some input fields
var myKey1 = $("input[name='my_field_one']").val();
var myKey2 = $("input[name='my_field_two']").val();
// append the values to the formData object, whilst also defining their key names
myFormData.append("my_field_one",myKey1);
myFormData.append("my_field_two",myKey2);
// mock implementation - in order to view what is being sent
var xhr = new XMLHttpRequest;
xhr.open('POST', '/echo/html/', true);
xhr.send(myFormData);
}

Просто держите открытой вкладку «Сеть» в Firebug, и вы сможете увидеть значения.

person user1063287    schedule 03.07.2014

Ты должен сделать:

console.log(fd['Name']);

И в большинстве браузеров, особенно в хроме, вы открываете Инструменты разработчика (F12) и видите консоль.

Вы получите хороший расширяемый вид вашего объекта, и вы сможете его осмотреть.

person gideon    schedule 01.12.2012