2013年7月8日月曜日

jQuery.ajax() でファイルを送る

HTML の <input type="file"> で選択したファイルを  jQuery.ajax() で送る方法です。

通常は <input type="submit"> ボタンを押した時にファイルが送信されますが、
JavaScript で後から送信したい場合があります。

HTML が以下のようになっていたとします。
<h2>ファイルアップロード</h2>
<form id="ajaxform">
    <input id="file" name="file" type="file"></input>
    <input id="submit" type="submit"></input>
</form>

jQuery で以下のように書きます。
// ファイルのアップロード
$('#submit').click(function() {
  
    // FormData の作成
    var form = $('#ajaxform').get(0);
    var formData = new FormData(form);
  
    // FormData を送信
    $.ajax('/upload', {
        method: 'POST',
        contentType: false,
        processData: false,
        data: formData,
        dataType: 'json',
        error: function() {
            console.log('error');
        },
        success: function() {
            console.log('success');
        }
    });
 
    // false を返してデフォルトの動作をキャンセル
    return false;
});

dataType はサーバの出力に合わせて変更して下さい。

ポイントは contentType と processData が false になるところです。
contentType = 'multipart/form-data' にはなりません。
詳しくは jQuery のドキュメントをご覧ください。


参考

jQuery.ajax()
    http://api.jquery.com/jQuery.ajax/

The FormData Interface - W3C
    http://www.w3.org/TR/2010/WD-XMLHttpRequest2-20100907/#the-formdata-interface

jQueryでAjaxでファイルアップロード - やわらかたまご - molaovo -