2015-09-06 4 views
10

lässt Sprung direkt in den Code:FormularData-Objekt funktioniert nicht mit 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); 

Hier habe ich ein paar Strings am anhängt und ein Datei-Objekt zu dem Objekt Formdata, um die Informationen alle asynchron an den Server zu senden.

Gleich danach Ich habe diese jquery Ajax-Request:

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

Also hier Ich versuche, die Informationen an den Server, auf dem Server PHP-Datei POST ich eine einfache print_r des POST haben, damit ich sehen was durchkommt und was nicht.

Leider ist meine Antwort in der console.log (Daten) leer.

Auch wenn Sie die Header in der Registerkarte Netzwerk überprüfen Sie die folgende leere Ausgabe:

enter image description here

Erfolgsfunktion (nur zur Verdeutlichung) aufgerufen wird

+0

'JSON.stringify' funktioniert nur mit ** ** Ebene Objekte/Arrays . 'FormData' ist kein einfaches Objekt. Sie müssen ['FormData.getAll()'] übergeben (https: //developer.mozilla.org/de-DE/docs/Web/API/FormData/getAll) anstelle von 'FormData' – hindmost

+0

Daten: JSON.stringify (formData.getAll())? Dies führt zu Uncaught TypeError: formData.getAll ist keine Funktion –

+0

Verwenden Sie dann nicht 'JSON.stringify' überhaupt. Übergeben Sie 'formData' wie es ist. – hindmost

Antwort

13

Wenn Sie eine Ajax sind zu senden Anfrage über jQuery und Sie möchten FormData senden, müssen Sie nicht JSON.stringify auf diesem FormData verwenden. Auch wenn Sie Datei der Inhaltstyp sind zu senden müssen multipart/form-data einschließlich boundry - so etwas wie dieses multipart/form-data; boundary=----WebKitFormBoundary0BPm0koKA

So Formdata einschließlich einiger Datei über jQuery Ajax senden Sie benötigen:

  • Set data auf die Formdata ohne irgendwelche Änderungen.
  • Setzen Sie processData auf false (Damit verhindern Sie, dass jQuery die Daten automatisch in eine Abfragezeichenfolge konvertiert).
  • Setzen Sie die contentType auf false (Dies wird benötigt, da jQuery sonst falsch eingestellt wird).

Ihre Anfrage sollte wie folgt aussehen:

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

habe ich meinen Code zu Ihrem und - leider die Antwort ist leer leer :(und leer bedeutet nicht "null" oder so, es ist nur eine leere console.log –

+0

Dies funktioniert nicht für Ich, schaue hier auf meine Frage http://StackOverflow.com/Questions/35954488/How-to-Grab-Formdaten-Bleib-von-Ajax-To-Nodejs?noredirect=1#Comment59565110_35954488 – Lion789

+0

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

3

, wenn Sie genau, wie durchlässig anwswer tat und immer noch nicht tun sie nicht its working

vielleicht intelligence and quick wath Sorge erzählen Sie seine not working

enter image description here

Sorge

aber nicht, schauen Sie sich network tap enter image description here

seine Arbeit

Hoffnung dies spart Zeit

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

Wenn Sie antworten, sollten Sie den Fehler/das Problem in der ursprünglichen Frage erklären und wie Sie es gelöst haben. Vergessen Sie nicht, dass jede Frage bei StackOverflow von angezeigt wird eine Anzahl von Benutzern und Nicht-Benutzern, um ihre ähnlichen Probleme zu lösen. Damit sie von Ihrer Antwort profitieren, würde jeder Ihre Erklärung lieber durchgehen. –