1. ホーム
  2. javascript

[解決済み] Ajaxを使用して1つのフォームでデータとファイルの両方をアップロードする?

2022-03-21 18:25:34

質問

データとファイルを送信するフォームにjQueryとAjaxを使っていますが、1つのフォームでデータとファイルの両方を送信する方法がよくわかりません?

現在、どちらの方法もほぼ同じですが、データを配列にまとめる方法が異なり、データには .serialize(); が、ファイルには = new FormData($(this)[0]);

両方の方法を組み合わせて、1つのフォームでファイルとデータをAjaxでアップロードできるようにすることは可能でしょうか?

データ jQuery, Ajax, html

$("form#data").submit(function(){

    var formData = $(this).serialize();

    $.ajax({
        url: window.location.pathname,
        type: 'POST',
        data: formData,
        async: false,
        success: function (data) {
            alert(data)
        },
        cache: false,
        contentType: false,
        processData: false
    });

    return false;
});

<form id="data" method="post">
    <input type="text" name="first" value="Bob" />
    <input type="text" name="middle" value="James" />
    <input type="text" name="last" value="Smith" />
    <button>Submit</button>
</form>

ファイル jQuery、Ajax、html

$("form#files").submit(function(){

    var formData = new FormData($(this)[0]);

    $.ajax({
        url: window.location.pathname,
        type: 'POST',
        data: formData,
        async: false,
        success: function (data) {
            alert(data)
        },
        cache: false,
        contentType: false,
        processData: false
    });

    return false;
});

<form id="files" method="post" enctype="multipart/form-data">
    <input name="image" type="file" />
    <button>Submit</button>
</form>

上記を組み合わせて、Ajaxでデータとファイルを1つのフォームで送れるようにするにはどうしたらいいですか?

私の目的は、このフォームをすべてAjaxで1つの投稿で送信できるようにすることですが、可能でしょうか?

<form id="datafiles" method="post" enctype="multipart/form-data">
    <input type="text" name="first" value="Bob" />
    <input type="text" name="middle" value="James" />
    <input type="text" name="last" value="Smith" />
    <input name="image" type="file" />
    <button>Submit</button>
</form>

解決方法は?

私が抱えていた問題は、間違ったjQueryの識別子を使用していたことです。

あなた データおよびファイルのアップロードが可能 一つのフォームで ajaxを使用した .

PHP + HTML

<?php

print_r($_POST);
print_r($_FILES);
?>

<form id="data" method="post" enctype="multipart/form-data">
    <input type="text" name="first" value="Bob" />
    <input type="text" name="middle" value="James" />
    <input type="text" name="last" value="Smith" />
    <input name="image" type="file" />
    <button>Submit</button>
</form>

jQuery + Ajax

$("form#data").submit(function(e) {
    e.preventDefault();    
    var formData = new FormData(this);

    $.ajax({
        url: window.location.pathname,
        type: 'POST',
        data: formData,
        success: function (data) {
            alert(data)
        },
        cache: false,
        contentType: false,
        processData: false
    });
});

ショートバージョン

$("form#data").submit(function(e) {
    e.preventDefault();
    var formData = new FormData(this);    

    $.post($(this).attr("action"), formData, function(data) {
        alert(data);
    });
});