2015-09-06 13 views
10

pozwala prawo skok do kodu:obiekt formData nie działa z postem AJAX jquery?

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); 

Oto jestem dołączając pewne ciągi i przedmiot jednego pliku do obiektu formData aby wysłać wszystkie informacje asynchroniczne do serwera.

Zaraz po tym mam prośbę 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(){ 
    } 
}); 

Więc próbuję opublikować informacje do serwera, na plik serwera php Mam proste print_r Poczty tak widzę co przechodzi, a co nie.

Niestety moja odpowiedź w pliku console.log (dane) jest pusta.

także sprawdzając nagłówku w zakładce Network pojawi się następujący komunikat: pusty

enter image description here

funkcja Sukces jest wywoływana (tylko dla wyjaśnienia)

+0

'JSON.stringify' działa tylko z prostych ** ** obiektów/tablice . 'FormData' nie jest prostym obiektem. Musisz przekazać ['FormData.getAll()'] (https: //developer.mozilla.org/en-US/docs/Web/API/FormData/getAll) zamiast danych "FormData" – hindmost

+0

: JSON.stringify (formData.getAll())? Powoduje to Uncaught TypeError: formData.getAll nie jest funkcją –

+0

Następnie nie używaj w ogóle 'JSON.stringify'. Przekaż 'formData' tak jak jest. – hindmost

Odpowiedz

13

Podczas wysyłania ajax Żądaj za pośrednictwem jQuery i chcesz wysłać formularz FormData, nie musisz używać JSON.stringify w tym formularzu. Także podczas wysyłania pliku typ zawartości musi być multipart/form-data tym boundry - coś w tym multipart/form-data; boundary=----WebKitFormBoundary0BPm0koKA

tak wysłać FormData tym jakiś plik przez jQuery AJAX trzeba:

  • Ustaw data do FormData bez wszelkie modyfikacje.
  • Zestaw processData do false (Pozwala zapobiec automatycznej transformacji danych przez jQuery w ciąg zapytania).
  • Ustaw contentType na false (Jest to konieczne, ponieważ w przeciwnym razie jQuery ustawi je niepoprawnie).

Żądanie powinno wyglądać następująco:

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

Udoskonaliłem swój kod do twojego i - niestety odpowiedź jest pusta :(i przez puste i nie mam na myśli "null" lub tak, jest to po prostu pusta konsola.log –

+0

To nie działa dla ja, spójrz na moje pytanie tutaj http://stackoverflow.com/questions/35954488/how-to-grab-formdata-being-passed-fa--jax-to-nodejs?noredirect=1#comment59565110_35954488 – Lion789

+0

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

3

jeśli nie dokładnie tak, jak przepuszczalną anwswer i nadal nie działa dont worry its working

może intelligence and quick wath mówią ci jego not working

enter image description here

ale nie martw się, spojrzeć na network tap enter image description here

jego pracy

nadzieję, że ta oszczędza czas

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

Podczas odpowiadania, rozważ wyjaśnienie błędu/problemu w oryginalnym pytaniu i jak go rozwiązałeś Nie zapomnij, że każde pytanie w StackOverflow jest oglądane przez wielu użytkowników i nie-użytkowników, aby rozwiązać podobne problemy. Aby móc skorzystać z odpowiedzi, każdy wolałby przejść przez swoje wyjaśnienia. –

Powiązane problemy