2015-09-06 23 views
10

lascia saltare a destra in codice:oggetto formData non funziona con un post 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); 

Eccomi aggiungendo alcune stringhe e oggetto di un file per l'oggetto formdata al fine di inviare tutti i dati asincrona al server.

Subito dopo ho questa richiesta 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(){ 
    } 
}); 

Così qui sto cercando di pubblicare l'informazioni al server, sul server di file php Ho una semplice print_r del POST quindi non vedo cosa passa e cosa no

Sfortunatamente la mia risposta in console.log (dati) è vuota.

anche se si controlla l'intestazione nella scheda Rete si ottiene il seguente output vuoto:

enter image description here

funzione Successo viene chiamata (solo per chiarimenti)

+0

'JSON.stringify' funziona solo con ** ** semplici oggetti/array . 'FormData' non è un oggetto semplice. Devi passare ['FormData.getAll()'] (https: //developer.mozilla.org/it-it/docs/Web/API/FormData/getAll) invece di 'FormData' – hindmost

+0

data: JSON.stringify (formData.getAll())? Questo risulta in Uncaught TypeError: formData.getAll non è una funzione –

+0

Quindi non utilizzare affatto 'JSON.stringify'. Passa 'formData' così com'è. – hindmost

risposta

13

Quando si sta inviando un'ajax richiesta tramite jQuery e si desidera inviare FormData non è necessario utilizzare JSON.stringify su questo FormData. Anche quando si sta inviando il file al tipo di contenuto deve essere compreso multipart/form-databoundry - qualcosa di simile multipart/form-data; boundary=----WebKitFormBoundary0BPm0koKA

Quindi per inviare formdata tra cui alcuni file tramite jQuery Ajax è necessario:

  • Impostare data al formdata senza eventuali modifiche.
  • Imposta processData su false (Consente di impedire a jQuery di trasformare automaticamente i dati in una stringa di query).
  • Impostare contentType su false (Ciò è necessario perché altrimenti jQuery lo imposterà in modo errato).

La richiesta dovrebbe essere simile a questo:

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

Ho migliorato il mio codice al tuo e - sfortunatamente la risposta è completamente vuota :(e vuoto non intendo "null" o così, è solo un console.log vuoto –

+0

Questo non funziona per io, guarda la mia domanda qui http://stackoverflow.com/questions/35954488/how-to-grab-formdata-being-passed-from-ajax-to-nodejs?noredirect=1#comment59565110_35954488 – Lion789

+0

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

3

se avete fatto anwswer esattamente come permeabile e ancora non funziona non preoccupatevi its working

forse intelligence and quick wath si sta dicendo la sua not working

enter image description here

ma non preoccupatevi, guarda network tap enter image description here

suo lavoro

speranza questo permette di risparmiare tempo

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

Quando rispondi, considera di spiegare l'errore/problema nella domanda originale e come l'hai risolto. Non dimenticare che ogni domanda su StackOverflow viene visualizzata da un numero di utenti e non utenti per risolvere i loro problemi simili. Quindi, per poter beneficiare della tua risposta, tutti preferirebbero passare attraverso la tua spiegazione. –