2016-07-14 7 views
3

Hallo Leute meinen HTML-Code:jquery ajax Post-Datei, mehrere Dateien und Texteingabe

<form action="post.php" enctype="multipart/form-data" method="post"> 
    <input type="text" name="name" id=""><br> 
    <input type="file" name="poster" id="poster"><br> 
    <input type="file" name="scene[]" id="scene" multiple><br> 
    <input type="submit" value="POST"> 
</form> 

wie Sie sehen eine einzelne Datei, mehrere Dateien, und ich habe einen Textwert. Dieser Wert 'Ajax' mit will auf einmal senden. 'JQuery' benutze ich.

Ich kann nicht in irgendeiner Weise laufen

$(function(){ 
     $('input[type="submit"]').click(function(e){ 
      e.preventDefault(); 
      var file_data = $('#poster').prop('files')[0]; 
      var form = $('form').serialize(); 
      var form_data = new FormData(); 
      $.each($('input[name="scene[]"]'),function(i, obj) { 
       $.each(obj.files,function(j,file){ 
        form_data.append('photo['+i+']', file); 
        }) 
       }); 
      form_data.append(form); 
      form_data.append('file',file_data); 
      alert(form_data); 
      $.ajax({ 
       url:'post.php', 
       cache:false, 
       contentType:false, 
       processData:false, 
       async:false, 
       data:form_data, 
       type:'post', 
       success:function(answ){ 
        $('#result').html(answ); 
       } 
      }) 
     }) 
    }) 

ich bei anderen ähnlichen Lösungen gesucht, aber es hat nicht mein Problem beheben und mein schlechtes Englisch beitetes.

Antwort

4

Sie müssen dies nicht manuell tun; Wenn Sie nur form als DOME-Element für den FormData-Konstruktor angeben, werden alle Formularwerte automatisch für Sie eingeschlossen.

Beachten Sie auch, dass Sie an das Ereignis submit des Formulars, nicht das Ereignis click der Übermittlungsschaltfläche hängen sollten. Sie sollten auch die Verwendung von async: false entfernen, da es unglaublich schlecht zu benutzen ist.

all das gesagt ist, versuchen Sie dies:

$('form').submit(function(e){ 
    e.preventDefault(); 
    var form_data = new FormData(this); 

    $.ajax({ 
     type: 'post', 
     url: 'post.php', 
     data: form_data, 
     cache: false, 
     contentType: false, 
     processData: false, 
     success: function(answ){ 
      $('#result').html(answ); 
     } 
    }) 
}) 
+0

ty viel sehr. neue FormData (this); Ich habe nicht darüber nachgedacht. omg – vulkan

+0

Kein Problem, froh zu helfen. Zu Ihrer Information, hier ist der [FormData-Eintrag bei MDN] (https://developer.mozilla.org/en-US/docs/Web/API/FormData/FormData) –

+0

@RoryMcCrossan, dies erstellt Formular-Name-Wert-Paar unter Verwendung von Elementen 'Name Attribut. Ich benutze ASP.NET, das den Namen der Elemente für serverseitige Steuerelemente durcheinander bringt. Daher verwende ich die IDs von Elementen, um Name-Wert-Paare mit einer Serialisierungsfunktion zu konstruieren (durch alle Formularsteuerelemente nach ID). Gibt es eine Möglichkeit, die ich für Textsteuerelemente serialisieren und Dateidaten an die Formdata anhängen kann? Ich bin OK, es manuell zu tun, wie OP es versuchte. Danke im Voraus! –