JQuery AJAX を介して FormData と String データを同時に送信する
単一の 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 中国語 Web サイトの他の関連記事を参照してください。