2015-09-06 3 views
10

позволяет прыгать прямо в код:formData объект не работает с jquery AJAX post?

var formData = new FormData(); 

formData.append('name', dogName); 
formData.append('weight', dogWeight); 
formData.append('activity', dogActivity); 
formData.append('age', dogAge); 
formData.append('file', document.getElementById("dogImg").files[0]); 
console.log(formData); 

Вот я, добавляя некоторые строки и объект один файл в объект FormData для того, чтобы отправить всю информацию асинхронной к серверу.

Сразу после этого у меня есть этот запрос JQuery Ajax:

$.ajax({ 
    type: "POST", 
    url: "/foodoo/index.php?method=insertNewDog", 
    data: formData, 
    processData: false, 
    contentType: false, 
    success: function(response){ 
    console.log(response); 
    }, 
    error: function(){ 
    } 
}); 

Так вот я выкладываю информацию на сервер, на файловом сервере PHP У меня есть простой print_r в POST, так что я вижу что проходит, а что нет.

К сожалению, мой ответ в console.log (данные) пуст.

Кроме того, если вы проверяете HEADER на вкладке Network вы получите следующий результат: пустой

enter image description here

функция Успех будет вызываться (только для осветления)

+0

'JSON.stringify' работает только с ** ** равнинных объектов/массивов , 'FormData' - не простой объект. Вы должны передать ['FormData.getAll()'] (https: //developer.mozilla.org/en-US/docs/Web/API/FormData/getAll) вместо 'FormData' – hindmost

+0

данные: JSON.stringify (formData.getAll())? В результате вызывается Uncaught TypeError: formData.getAll не является функцией –

+0

Тогда не используйте 'JSON.stringify' вообще. Передайте 'formData' как есть. – hindmost

ответ

13

Когда вы отправляете в Ajax запросить через jQuery, и вы хотите отправить FormData, вам не нужно использовать JSON.stringify в этом FormData. Кроме того, когда вы отправляете файл типа содержимого должен быть multipart/form-data включая boundry - что-то вроде этого multipart/form-data; boundary=----WebKitFormBoundary0BPm0koKA

Так отправить FormData в том числе некоторых файлов с помощью JQuery AJAX вам нужно:

  • Установите data в FormData без любые изменения.
  • processData - false (Позволяет запретить jQuery автоматически преобразовывать данные в строку запроса).
  • Установите contentType на номер false (Это необходимо, поскольку в противном случае jQuery установит его неправильно).

Ваш запрос должен выглядеть следующим образом:

var formData = new FormData(); 

formData.append('name', dogName); 
// ... 
formData.append('file', document.getElementById("dogImg").files[0]); 


$.ajax({ 
    type: "POST", 
    url: "/foodoo/index.php?method=insertNewDog", 
    data: formData, 
    processData: false, 
    contentType: false, 
    success: function(response) { 
     console.log(response); 
    }, 
    error: function(errResponse) { 
     console.log(errResponse); 
    } 
}); 
+0

Я улучшил свой код до вашего и, к сожалению, ответ пуст пустым :(и пустым я не имею в виду «null» или так, его просто пустой console.log –

+0

Это не работает для меня, посмотрите на мой вопрос здесь http://stackoverflow.com/questions/35954488/how-to-grab-formdata-being-passed-from-ajax-to-nodejs?noredirect1_comment59565110_35954488 – Lion789

+0

formData.append (' name ', $ ("# idofinputfiled"). val()); –

3

если вы сделали именно так, как проницаемый anwswer и до сих пор не работает не переживайте its working

возможно intelligence and quick wath говорят вам его not working

enter image description here

, но не волнуйтесь, посмотрите на network tap enter image description here

его рабочим

надеюсь, что это экономит ваше время

0
//For those who use plain javascript 

var form = document.getElementById('registration-form'); //id of form 
var formdata = new FormData(form); 
var xhr = new XMLHttpRequest(); 
xhr.open('POST','form.php',true); 
// xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
//if you have included the setRequestHeader remove that line as you need the 
// multipart/form-data as content type. 
xhr.onload = function(){ 
console.log(xhr.responseText); 
} 
xhr.send(formdata); 
+0

При ответе подумайте об объяснении ошибки/проблемы в исходном вопросе и о том, как вы ее решили. Не забывайте, что каждый вопрос в StackOverflow просматривается ряд пользователей и не-пользователей для решения подобных проблем. Поэтому для того, чтобы они могли воспользоваться вашим ответом, все предпочли бы продолжить ваше объяснение. –

Смежные вопросы