Будет ли typeof до и после преобразования одинаковым?
blockquote>Поскольку «file» не является типом данных JavaScript. Все, что не является примитивным, является объектом.
console.log(typeof 1); console.log(typeof "1"); console.log(typeof null); console.log(typeof undefined); console.log(typeof [1,2,3]); console.log(typeof {hello: "world"}); console.log(typeof new Date()); console.log(typeof document.body); console.log(typeof window);
2) Как я могу отправить массивы файловых объектов в бэкэнд? Есть ли другое решение?
blockquote>
- Понимать, как форматируются данные при отправке их по HTTP
- Понимать ограничения jQuery
Вы не можете отправить массив. Вы можете отправить только некоторый текст, который серверный код может собрать в массив.
Для обоих стандартных кодировок, поддерживаемых формами , PHP заполнит
Будет ли typeof до и после преобразования одинаковым?
blockquote>Поскольку «file» не является типом данных JavaScript. Все, что не является примитивным, является объектом.
[110]2) Как я могу отправить массивы файловых объектов в бэкэнд? Есть ли другое решение?
blockquote>
- Понимать, как форматируются данные при отправке их по HTTP
- Понимать ограничения jQuery
Вы не можете отправить массив. Вы можете отправить только некоторый текст, который серверный код может собрать в массив.
Для обоих стандартных кодировок, поддерживаемых формами , PHP заполнит [118] данными в них.
Если имя поля в этих данных заканчивается на
[]
, PHP поместит массив в
Будет ли typeof до и после преобразования одинаковым?
blockquote>Поскольку «file» не является типом данных JavaScript. Все, что не является примитивным, является объектом.
[110]2) Как я могу отправить массивы файловых объектов в бэкэнд? Есть ли другое решение?
blockquote>
- Понимать, как форматируются данные при отправке их по HTTP
- Понимать ограничения jQuery
Вы не можете отправить массив. Вы можете отправить только некоторый текст, который серверный код может собрать в массив.
Для обоих стандартных кодировок, поддерживаемых формами , PHP заполнит [118] данными в них.
Если имя поля в этих данных заканчивается на [119], PHP поместит массив в [1110].
Если вы передадите массив в jQuery ajax:
data: { someValue: [1, 2, 3] }
Тогда jQuery закодирует его как:
someValue[]=1&someValue[]=2&someValue[]=3
… поэтому PHP сгенерирует массив.
Однако значения должны быть вещами, которые понимает jQuery. Он не может обрабатывать
FormData
объектов.Если вы хотите отправить объект
FormData
(что необходимо сделать для отправки файлов), вам нужно отправить вместо объекта:[1134 ] Вам нужноjQuery.ajax({ url: "/foo", data: a_form_data_object, processData: false, contentType: false, });
processData
, чтобы он не пытался преобразовать объект FormData (то есть, чтобы он позволил XMLHttpRequest сделать это). Вам нужноcontentType
, чтобы остановить его, переопределяя один XMLHttpRequest, сгенерированный из объекта FormData.
Итак, чтобы отправить массив, мы возвращаемся к правилам, которые я описал выше. Вы сказали:
blockquote>fileBag.append(file_name, file);
Но чтобы получить массив, вам нужно имя, заканчивающееся на
[]
.fileBag.append("myname[]", file);
Наконец, не виден в вашем вопросе, но смотрит на ваш кодовый блок. Это даст вам набор файлов:
blockquote>document.getElementById(fileUploadButtonId).files;
Поскольку они являются файлами , использование кода для их преобразования в файлов делает нет смысла.
Вы можете упростить свой код:
POST.var fileBag = new FormData(); var files = document.getElementById(fileUploadButtonId).files; var arrayOfAllUploadedFiles = Array.from(files); fileArray.forEach(file => fileBag.append("myname[]", file); jQuery.ajax({ url: "/foo", data: fileBag, processData: false, contentType: false, });
Если вы передадите массив в jQuery ajax:
[111]Тогда jQuery закодирует его как:
[112]… поэтому PHP сгенерирует массив.
Однако значения должны быть вещами, которые понимает jQuery. Он не может обрабатывать
FormData
объектов.Если вы хотите отправить объект
[113] [1134 ] Вам нужноFormData
(что необходимо сделать для отправки файлов), вам нужно отправить вместо объекта:processData
, чтобы он не пытался преобразовать объект FormData (то есть, чтобы он позволил XMLHttpRequest сделать это). Вам нужноcontentType
, чтобы остановить его, переопределяя один XMLHttpRequest, сгенерированный из объекта FormData.
Итак, чтобы отправить массив, мы возвращаемся к правилам, которые я описал выше. Вы сказали:
[114] blockquote>Но чтобы получить массив, вам нужно имя, заканчивающееся на
[115][]
.Наконец, не виден в вашем вопросе, но смотрит на ваш кодовый блок. Это даст вам набор файлов:
[116] blockquote>Поскольку они являются файлами , использование кода для их преобразования в файлов делает нет смысла.
Вы можете упростить свой код:
[117]POST данными в них.Если имя поля в этих данных заканчивается на
[]
, PHP поместит массив в
Будет ли typeof до и после преобразования одинаковым?
blockquote>Поскольку «file» не является типом данных JavaScript. Все, что не является примитивным, является объектом.
[110]2) Как я могу отправить массивы файловых объектов в бэкэнд? Есть ли другое решение?
blockquote>
- Понимать, как форматируются данные при отправке их по HTTP
- Понимать ограничения jQuery
Вы не можете отправить массив. Вы можете отправить только некоторый текст, который серверный код может собрать в массив.
Для обоих стандартных кодировок, поддерживаемых формами , PHP заполнит [118] данными в них.
Если имя поля в этих данных заканчивается на [119], PHP поместит массив в [1110].
Если вы передадите массив в jQuery ajax:
[111]Тогда jQuery закодирует его как:
[112]… поэтому PHP сгенерирует массив.
Однако значения должны быть вещами, которые понимает jQuery. Он не может обрабатывать
FormData
объектов.Если вы хотите отправить объект
[113] [1134 ] Вам нужноFormData
(что необходимо сделать для отправки файлов), вам нужно отправить вместо объекта:processData
, чтобы он не пытался преобразовать объект FormData (то есть, чтобы он позволил XMLHttpRequest сделать это). Вам нужноcontentType
, чтобы остановить его, переопределяя один XMLHttpRequest, сгенерированный из объекта FormData.
Итак, чтобы отправить массив, мы возвращаемся к правилам, которые я описал выше. Вы сказали:
[114] blockquote>Но чтобы получить массив, вам нужно имя, заканчивающееся на
[115][]
.Наконец, не виден в вашем вопросе, но смотрит на ваш кодовый блок. Это даст вам набор файлов:
[116] blockquote>Поскольку они являются файлами , использование кода для их преобразования в файлов делает нет смысла.
Вы можете упростить свой код:
[117]POST.Если вы передадите массив в jQuery ajax:
[111]Тогда jQuery закодирует его как:
[112]… поэтому PHP сгенерирует массив.
Однако значения должны быть вещами, которые понимает jQuery. Он не может обрабатывать
FormData
объектов.Если вы хотите отправить объект
[113] [1134 ] Вам нужноFormData
(что необходимо сделать для отправки файлов), вам нужно отправить вместо объекта:processData
, чтобы он не пытался преобразовать объект FormData (то есть, чтобы он позволил XMLHttpRequest сделать это). Вам нужноcontentType
, чтобы остановить его, переопределяя один XMLHttpRequest, сгенерированный из объекта FormData.
Итак, чтобы отправить массив, мы возвращаемся к правилам, которые я описал выше. Вы сказали:
[114] blockquote>Но чтобы получить массив, вам нужно имя, заканчивающееся на
[115][]
.Наконец, не виден в вашем вопросе, но смотрит на ваш кодовый блок. Это даст вам набор файлов:
[116] blockquote>Поскольку они являются файлами , использование кода для их преобразования в файлов делает нет смысла.
Вы можете упростить свой код:
[117]
Первый путь легче поддержать. Каждое объявление является отдельным оператором на одной строке, таким образом, можно легко добавить, удалить и переупорядочить объявления.
Со вторым путем это является раздражающим для удаления первого или последнего объявления, потому что они содержат var
ключевое слово и точка с запятой. И каждый раз, когда Вы добавляете новое объявление, необходимо изменить точку с запятой в старой строке к запятой.
var variable1 = "Hello World!";
var variable2 = "Testing...";
var variable3 = 42;
более читаемо, чем:
var variable1 = "Hello World!",
variable2 = "Testing...",
variable3 = 42;
Но они делают то же самое.
Это - просто вопрос персонального предпочтения. Нет никакого различия между этими двумя путями кроме нескольких байтов, сохраненных со второй формой при разделении пробела.
Обычно для организации используется один оператор var
для каждой области . То, как все области действия следуют аналогичному шаблону, что делает код более читабельным. Вдобавок двигатель все равно «поднимает» их всех наверх. Таким образом, объединение ваших заявлений более точно имитирует то, что на самом деле произойдет.