ホームページ > バックエンド開発 > PHPチュートリアル > JQuery AJAX を使用して FormData と文字列データを同時に送信する方法

JQuery AJAX を使用して FormData と文字列データを同時に送信する方法

DDD
リリース: 2024-10-22 15:16:02
オリジナル
918 人が閲覧しました

How to Send FormData and String Data Simultaneously Using JQuery AJAX

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=&amp;category_id=15&amp;method=upload&amp;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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート