2016-07-14 29 views
3

好傢伙我的html代碼:jQuery的AJAX後處理文件,多個文件和文本輸入

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

當你看到一個文件,多個文件,而且我有一個文本值。這個值'ajax',一次發送。我使用'JQuery'。

我不能以任何方式

$(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); 
       } 
      }) 
     }) 
    }) 

我看着其他類似的解決方案上運行,但它並沒有解決我的問題 和索裏我的英語不好。

回答

4

您不需要手動執行此操作;如果您只是將form作爲DOMElement提供給FormData構造函數,則所有表單值將自動包含給您。

另請注意,您應該勾選表單的submit事件,而不是提交按鈕的click事件。你也應該刪除使用async: false,因爲這是非常糟糕的做法使用。

與所有的說,試試這個:

$('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非常多。新的FormData(this);我沒有想過。 omg – vulkan

+0

沒問題,很樂意幫忙。爲了您的參考,這裏是[MDN中的FormData條目](https://developer.mozilla.org/en-US/docs/Web/API/FormData/FormData) –

+0

@RoryMcCrossan,這將創建表單的名稱 - 值對'name屬性。我正在使用ASP.NET將服務器端控件的元素名稱弄亂。因此,我使用元素的ID來使用序列化函數構造名稱 - 值對(通過id循環所有表單控件)。有沒有一種方法可以序列化文本控件並將文件數據附加到formdata?我可以按照OP的設法手動完成。提前致謝! –