Отправить объект FormData И дополнительный параметр через ajax

Мне удалось отправить объект FormData вот так:

var formData = new FormData();
formData.append('file', this.files[0]);
$.ajax({
   url: urlUploadProductsFile,
   type: 'POST',
   data: formData,
   cache: false,
   contentType: false,
   processData: false
}, 'json');

Теперь я хочу добавить еще CustomerId для отправки на сервер. Следующее не сработает:

var formData = new FormData();
formData.append('file', this.files[0]);
$.ajax({
   url: urlUploadProductsFile,
   type: 'POST',
   data: { "file": formData, "CustomerId": 2 },
   cache: false,
   contentType: false,
   processData: false
}, 'json');

А еще я пробовал следующие варианты:

data: { "file": formData, "CustomerId": 2 }, processData: true

data: JSON.stringify({ "file": formData, "CustomerId": 2 })

data: { "file": JSON.stringify(formData), "CustomerId": 2 }

data: { file: formData, CustomerId: 2 }

Любая помощь приветствуется.


person iuliu.net    schedule 06.04.2016    source источник


Ответы (2)


Пытаться:

var formData = new FormData();
formData.append('file', this.files[0]);
formData.append('CustomerId', 2);

/*
 note:: appending in form Data will give "csrf token mismatch error". 
 so better you make a input feild of type hidden with name = CustomerId 
 and value =  2 
*/ 

$.ajax({
   url: urlUploadProductsFile,
   type: 'POST',
   data: formData,
   cache: false,
   contentType: false,
   processData: false
}, 'json');
person Borik Bobrujskov    schedule 06.04.2016
comment
что, если вторичные данные не были простым типом вроде 2? Что, если мне также нужно отправить объект json? Как мне его закодировать во внешнем интерфейсе, и как я могу его раскодировать в контроллере? - person Joe; 21.02.2019
comment
JSON - это простая строка. Вы можете избежать этого, как указано здесь: freeformatter.com/json-escape.html › Следующие символы зарезервированы в JSON и должны быть правильно экранированы для использования в строках: Backspace заменяется на \ b Подача формы заменяется на \ f Новая строка заменяется на \ n Возврат каретки заменяется на \ r Tab заменяется на \ t Двойные кавычки заменяются на \ Обратная косая черта заменяется на \\ - person Borik Bobrujskov; 21.02.2019
comment
Для тех, кто придет сюда в будущем, дополнительные параметры, которые я добавил, были помещены в объект params req (запрос). - person NetOperator Wibby; 17.08.2019

Вам нужно либо добавить его непосредственно в formData (как и с 'file'), либо использовать параметры запроса (GET).

person Jiri Tousek    schedule 06.04.2016