Ajax ファイルのアップロードと削除
環境:Laravel5、JQuery
jsファイル
$(function(){ //ファイルのアップロード $('#files').on("change",function(){ // ファイル情報を取得 var files = this.files; // FormDataオブジェクトを用意 var fd = new FormData(); // ファイルの個数を取得 var filesLength = files.length; // ファイル情報を追加 for (var i = 0; i < filesLength; i++) { fd.append("files[]", files[i]); } $.ajax({ //GET,POST,PUT,DELETEなど type: 'POST', url: '/form/upload', data: fd, dataType:'json', processData: false, contentType: false, //laravelトークン対策 headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }).done(function(data,textStatus,jqXHR){ for(i=0;i<data.length;i++){ $('#file_list').append('<p id="file'+i+'"><span>'+data[i]+'</span><input type="hidden" name="attchmnt[]" value="'+data[i]+'"> <input type="button" value="削除"></p>'); delfile(i); } $('#files').remove(); alert('ファイルをアップロードしました。'); }).fail(function(jqXHR,textStatus,errorThrown){ //失敗時処理 alert('ファイルのアップロードに失敗しました。'); }).always(function(jqXHR,textStatus){ //共通処理 }); }); //ファイルの削除 function delfile(i){ $(document).on( "click", "#file"+i, function(){ var filename=$('#file'+i+' span').text(); $.ajax({ type:"POST", url:"/form/delfile", data:{ 'delfile':filename }, //laravelトークン対策 headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }).done(function(data,textStatus,jqXHR){ $('#file'+i).remove(); if(!$('#file_list p').length){ $('form').append('<input type="file" name="files" id="files" multiple="multiple">'); } alert('ファイルを削除しました。'); }).fail(function(jqXHR,textStatus,errorThrown){ //失敗時処理 alert('ファイルの削除に失敗しました。'); }).always(function(jqXHR,textStatus){ //共通処理 }); } ); } });
htmlファイル
<html> <head> <title>Laravel</title> <meta name="csrf-token" content="{{ csrf_token() }}"> <link href='//fonts.googleapis.com/css?family=Lato:100' rel='stylesheet' type='text/css'> <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script> <script type="text/javascript" src="http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script> <script type="text/javascript" src="http://ajax.googleapi.com/ajax/libs/jqueryui/1.10.4/i18n/jquery-ui-i18n.min.js"></script> <script type="text/javascript" src="/js/form.js"></script> <style> </style> </head> <body> <h1>ファイルアップロード</h1> <div id="file_list"> </div> <form action="" method="POST" enctype="multipart/form-data"> <input type="file" name="files" id="files" multiple="multiple"> </form> </body> </html>