FormData.добавить("ключ", "значение") не работает
можете ли вы сказать мне, что не так с этим:
var formdata = new FormData();
formdata.append("key", "value");
console.log(formdata);
мой вывод выглядит так, я не могу найти свою пару "ключ" - "значение"
FormData
*__proto__: FormData
**append: function append() { [native code] }
***arguments: null
***caller: null
***length: 0
***name: "append"
***prototype: append
***__proto__: function Empty() {}
*constructor: function FormData() { [native code] }
**arguments: null
**caller: null
**length: 0
**name: "FormData"
**prototype: FormData
**toString: function toString() { [native code] }
*__proto__: Object
**__proto__: Object
**__defineGetter__: function __defineGetter__() { [native code] }
**__defineSetter__: function __defineSetter__() { [native code] }
**__lookupGetter__: function __lookupGetter__() { [native code] }
**__lookupSetter__: function __lookupSetter__() { [native code] }
**constructor: function Object() { [native code] }
**hasOwnProperty: function hasOwnProperty() { [native code] }
**isPrototypeOf: function isPrototypeOf() { [native code] }
**propertyIsEnumerable: function propertyIsEnumerable() { [native code] }
**toLocaleString: function toLocaleString() { [native code] }
**toString: function toString() { [native code] }
**valueOf: function valueOf() { [native code] }
Я не могу понять! Вчера он работал так хорошо, а сегодня моя голова разбила клавиатуру так много раз! Firefox, Chrome, оба одинаковые :/
6 ответов:
новое в Chrome 50+ и Firefox 39+ (ОТВ. 44+):
formdata.entries()
(совмещать сArray.from()
для отладки)formdata.get(key)
- и еще очень полезные методы
оригинальный ответ:
что я обычно делаю для "отладки" a
FormData
объект, просто отправить его (в любом месте!) и проверьте журналы браузера (например. Вкладка "сеть Chrome devtools").вам не нужен/тот же Ajax рамки. Вам не нужны никакие подробности. Просто отправьте его:
var xhr = new XMLHttpRequest; xhr.open('POST', '/', true); xhr.send(data);
легко.
вы говорите, что это не работает. Что вы ожидаете произойдет?
нет никакого способа получить данные изFormData
объект; он просто предназначен для использования для отправки данных вместе с
возможно, у вас была та же проблема, что и у меня изначально. Я пытался использовать FormData, чтобы захватить все мои входные файлы для загрузки изображения, но в то же время я хотел добавить идентификатор сеанса к информации, передаваемой на сервер. Все это время я думал, добавляя информацию, вы сможете увидеть его на сервере, доступ к объекту. Я ошибался. Когда вы добавляете в FormData, способ проверить добавленную информацию на сервере является простым
$_POST['*your appended data*']
запрос. вот так:js:
$('form').submit(function(){ var sessionID = 8; var formData = new FormData(this); formData.append('id', sessionID); $.ajax({ url: "yoururl.php", data: formData, processData: false, contentType: false, type: 'POST', success: function(data){ alert(data); } }); });
затем на php:
$sessionID = $_POST['id']; $files = $_FILES['image']; $foreach ($files as $key=>val){ //... }
Если вы находитесь в Chrome вы можете проверить данные Post
вот как проверить данные поста
- перейдите на вкладку "Сеть"
- найдите ссылку, по которой вы отправляете почтовые данные
- нажимаем на него
- в заголовках вы можете проверить полезную нагрузку запроса, чтобы проверить данные post
вы можете видеть это вы должны использовать
console.log(formData.getAll('your key'))
; смотрите https://developer.mozilla.org/en-US/docs/Web/API/FormData/getAll
в моем случае на краю браузера:
const formData = new FormData(this.form); for (const [key, value] of formData.entries()) { formObject[key] = value; }
дайте мне ту же ошибку
Так что я не использую
FormData
и я просто вручную создать объектimport React from 'react'; import formDataToObject from 'form-data-to-object'; ... let formObject = {}; // EDGE compatibility - replace FormData by for (let i = 0; i < this.form.length; i++) { if (this.form[i].name) { formObject[this.form[i].name] = this.form[i].value; } } const data = formDataToObject.toObj(formObject): // convert "user[email]":"customer@mail.com" => "user":{"email":"customer@mail.com"} const orderRes = await fetch(`/api/orders`, { method: 'POST', credentials: 'same-origin', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); const order = await orderRes.json();