透過JQuery AJAX同時發送FormData和字串資料
透過單一AJAX請求即可實現同時傳輸檔案資料和常規輸入字串資料與FormData() 一起使用。例如,您可能希望將多個隱藏輸入欄位與檔案資料一起包含在伺服器請求中。
考慮以下HTML 表單:
<code class="html"><form action="image.php" method="post" enctype="multipart/form-data"> <input type="file" name="file[]" multiple="" /> <input type="hidden" name="page_id" value="<?php echo $page_id; ?>"/> <input type="hidden" name="category_id" value="<?php echo $item_category->category_id; ?>"/> <input type="hidden" name="method" value="upload"/> <input type="hidden" name="required[category_id]" value="Category ID"/> </form></code>
使用以下JQuery 程式碼但是,只傳送檔案數據,忽略了隱藏的輸入資料:
<code class="jquery">// HTML5 form data object. var fd = new FormData(); var file_data = object.get(0).files[i]; var other_data = $('form').serialize(); // page_id=&category_id=15&method=upload&required%5Bcategory_id%5D=Category+ID fd.append("file", file_data); $.ajax({ url: 'add.php', data: fd, contentType: false, processData: false, type: 'POST', success: function(data){ alert(data); } });</code>
在FormData( ) 中同時包含檔案和字串資料的關鍵在於修改JQuery 程式碼,如下所示:
<code class="javascript">var fd = new FormData(); var file_data = $('input[type="file"]')[0].files; // for multiple files for(var i = 0;i<file_data.length;i++){ fd.append("file_"+i, file_data[i]); } var other_data = $('form').serializeArray(); $.each(other_data,function(key,input){ fd.append(input.name,input.value); }); $.ajax({ url: 'test.php', data: fd, contentType: false, processData: false, type: 'POST', success: function(data){ console.log(data); } });</code>
這些修改引入了一個for 迴圈來處理多個檔案輸入,並將.serialize() 更改為.serializeArray() 以取得物件數組以在.each() 循環中進行操作,其中資料可以是附加到FormData()。
以上是如何使用 JQuery AJAX 同時傳送 FormData 和字串數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!