2017-03-15 5 views
0

Ich erstelle eine AJAX-Anfrage, wo ich Bilder mit FormData hinzugefügt. Es ist aussehen:Senden von Daten von Ajax zu Controller-Aktion

function handleForm(e) { 
    var data = new FormData(); 
    for(var i=0, len=storedFiles.length; i<len; i++) { 
     data.append('files['+i+']', storedFiles[i]); 
    } 
    $.ajax({ 
     url:'site/images', 
     type:'POST', 
     processData: false, 
     contentType:false, 
     data:data, 
     success: function (response) { 
      console.log(response); 
     } 
    }) 
} 

und Handhabung beim

$("#myForm").on("submit", handleForm); 

myForm id aller meiner Form. Dieses Formular gehen zu Aktion Site/Formular aber für Ajax Anfrage ich erstelle Site/Bild Aktion, wo ich Bilder bekommen kann. Ich möchte beide senden, wenn das Formular sendet. Aber Problem ist, wenn ich versuche, meine Bilder zu Site/Formular-Aktion zu setzen, muss ich es dann einfügen, weil Website/Formular unterschiedliche Logik behandeln (Speichern von Form_id von Formularmodell zu Bildermodell, Anhängen dieser Bilder an Mail und sonst) . Wie kann ich es lösen? Ich weiß, wie Bilder erhalten werden, wenn Formular-Anfrage an eine Aktion senden, und ich kann sie natürlich von UploadedFile :: getInstances() mit Modell und Modell-Attribut erhalten. Aber jetzt habe ich kein Modell und sonst nichts.

Antwort

0

Try This

var storedFiles= $("#upload"); 
if (storedFiles.get(0) != undefined) { 
      for (i = 0; i < storedFiles.get(0).files.length; i++) { 
       data.append("files['+i+']", storedFiles.get(0).files[i]); 
      } 
     } 
+0

was ist das? Ich brauche meinen js-Code nicht umzufunktionieren, es funktioniert gut, ich muss nur eine Variable von einer Aktion zur nächsten setzen – rostyslav

0

Ich bin nicht sicher, dass mein Konzept ist das, was meinen Sie .. aber ich denke, Sie erste Bilder in Wirkort/Bild Bilder Modelle und es mit speziellen eingereicht speichern speichern soll - temporäre ID, die für beide Aktionen und Modelle identisch ist (Formularmodell und Bildermodell). Die temporäre ID sollte generiert werden, wenn das Formular gerendert wird. Nach erfolgreichem Speichern der Bilder und dann erfolgreichem Speichern des Formularmodells sollten Sie die temporäre ID in den Bildmodellen durch die richtige ID ersetzen, die sich auf das gespeicherte Formularmodell bezieht. Wenn das Formularmodell ungültig ist und nicht gespeichert werden kann, sollten Sie Bildermodelle mit tmp ID löschen und den gesamten Prozess wiederholen.

0

Versuchen Sie multipart/form-data als Inhaltstyp beim Erstellen der AJAX-Anfrage.

Was Sie gefragt haben, ist ein bisschen falsch, AJAX-Anrufe sind nicht blockierend, können Sie sie zur gleichen Zeit senden, aber Sie wissen nicht, welche auf dem Server schneller wird, wenn Ihre site/form auf beruht , dann Daten zuerst an senden, nachdem die benutzerdefinierte Logik angewendet wird (Bilder werden auf dem Server hochgeladen und so) und die Ausführung ist erfolgreich, senden Sie die Daten site/form auf success zu dienen, sonst spucken Sie einen Fehler.

Verwandte Themen