JavaScript プログラミング講座
















FormData 




FormData クラスについて
FormData オブジェクトを作成する
FormData オブジェクトにデータを追加する
FormData オブジェクトを送信する







 




FormData 


 




 FormData 


 

FormData HTML5 
 
https://xhr.spec.whatwg.org/#interface-formdata

 

<FORM> 
 
<INPUT>  <TEXTAREA> 

 

name  value 

 


<FORM> 


    <form action="http://example.com/cgi-bin/upload.cgi" method="post" enctype="multipart/form-data" >

      <textarea name="my_textarea"> 値 </textarea> <br>

      <input type="text"   name="my_text"   value="値"> <br>
      <input type="hidden" name="my_hidden" value="値"> <br>
      <input type="file"   name="my_file"> <br>

      <input type="submit" value="送信">

    </form>



 

 FormData 

 

<FORM>  name  value 1 FormData 

 

XMLHttpRequest 使FormData 

 



 

FormData 使 <FORM> 

 

FormData 
 
FormData 

 

 FormData 調


 

window.FormData 

 

InternetExplorer 9 

 

 


 





 

 




FormData 


 




FormData 


 

new 使FormData 

 


new FormData( HTMLFormElement ) :FormData
01引数(略可)HTMLFormElementフォーム要素を指定
戻り値 FormDataFormData


 

01HTMLFormElement

 


 
<FORM> 

 

name  value 

 


FormData 


<html>
  <body>

    <form id="my_form" action="http://example.com/cgi-bin/upload.cgi" method="post" enctype="multipart/form-data" >

      <textarea name="my_textarea">!! MY VALUE A !!</textarea> <br>

      <input type="text"   name="my_text"   value="!! MY VALUE B !!"> <br>
      <input type="hidden" name="my_hidden" value="!! MY VALUE C !!"> <br>
      <input type="file"   name="my_file"> <br>

      <input type="submit" value="送信">

    </form>

    <script type="text/javascript">
    <!--
 // 匿名関数を即時実行
 (function(){

  // ------------------------------------------------------------
  // FormData に対応していない
  // ------------------------------------------------------------
  if(!(window.FormData)) return;

  // ------------------------------------------------------------
  // フォーム要素を取得する
  // ------------------------------------------------------------
  // id 属性が、"my_form" であるエレメントを取得
  var form = document.getElementById("my_form");

  // ------------------------------------------------------------
  // サブミット直前に実行されるイベント
  // ------------------------------------------------------------
  form.addEventListener("submit" , function(e){

   // ------------------------------------------------------------
   // デフォルトの動作をキャンセル(フォームの送信を中止)
   // ------------------------------------------------------------
   e.preventDefault();

   // ------------------------------------------------------------
   // FormData オブジェクトを作成する
   // ------------------------------------------------------------
   var form_data = new FormData(form);

   // 出力テスト
   console.log(form_data);

   // ------------------------------------------------------------
   // XMLHttpRequest を使った通信
   // ------------------------------------------------------------
   // XMLHttpRequest オブジェクトを作成
   //var xhr = new XMLHttpRequest();

   // 「POST メソッド」「接続先 URL」を指定
   //xhr.open("POST" , form.action);

   // 送信データに FormData を指定、XHR 通信を開始する
   //xhr.send(form_data);
  });

 })();
    //-->
    </script>

  </body>
</html>



 

 


 





 

 




FormData 


 




FormData 


 

FormData append() 使

 


FormData.append( "name" , "value" ) :Void
01引数 Stringname 属性値を文字列で指定。
02引数 Stringvalue 属性値を文字列で指定。
戻り値 Voidなし


 


FormData.append( "name" , Blob ,) :Void
01引数 String名前を文字列で指定。
02引数 BlobBlobFile オブジェクトを指定。
03引数(略可)String02引数で指定した Blob オブジェクトのファイル名を指定。
戻り値 Voidなし


 

02

 

value 

 

Blob  File 
 
File 

 

使

 


FormData 


// ------------------------------------------------------------
// FormData オブジェクトを作成する
// ------------------------------------------------------------
var form_data = new FormData();

// ------------------------------------------------------------
// name と value を指定してデータを追加する
// ------------------------------------------------------------
form_data.append("aaa","value_a");
form_data.append("bbb","value_b");
form_data.append("ccc","value_c");



 


FormData 


<html>
  <body>

    <div id="bbb" style="width:400px; height:300px; background:#ccf;" ></div>

    <script type="text/javascript">
    <!--
 // 匿名関数を即時実行
 (function(){

  // ------------------------------------------------------------
  // FormData に対応していない
  // ------------------------------------------------------------
  if(!(window.FormData)) return;

  // ------------------------------------------------------------
  // "bbb" というID属性のエレメントを取得する
  // ------------------------------------------------------------
  var element = document.getElementById("bbb");

  // ------------------------------------------------------------
  // FormData オブジェクトを作成する
  // ------------------------------------------------------------
  var form_data = new FormData();

  // ------------------------------------------------------------
  // ドラッグ操作中に実行されるイベント(マウスカーソルが要素内に滞在中)
  // ------------------------------------------------------------
  element.addEventListener("dragover" , function (e){
   // ドロップを許可し受け入れを表明
   e.preventDefault();
  });

  // ------------------------------------------------------------
  // ドロップ時に実行されるイベント
  // ------------------------------------------------------------
  element.addEventListener("drop" , function (e){

   // ------------------------------------------------------------
   // DataTransfer オブジェクトを取得する
   // ------------------------------------------------------------
   var data_transfer = e.dataTransfer;

   // ------------------------------------------------------------
   // ファイルを取得する(HTML5 世代)
   // ------------------------------------------------------------
   var file_list = data_transfer.files;
   if(file_list){
    var i;
    var num = file_list.length;
    for(i=0;i < num;i++){
     // File オブジェクトを取得
     var file = file_list[i];

     // ファイル名を取得
     var file_name = file.name;

     // name と File オブジェクトを指定してデータを追加する
     form_data.append(file_name,file);

     // 出力テスト
     console.log(file_name);
    }
   }

   // ------------------------------------------------------------
   // デフォルトのドロップ機能を無効化する
   // ------------------------------------------------------------
   e.preventDefault();
  });

 })();

    //-->
    </script>

  </body>
</html>



 


 





 

 




FormData 


 




FormData 


 

FormData XMLHttpRequest 使

 

XMLHttpRequest 

 


FormData 


// 匿名関数を即時実行
(function(){

 // ------------------------------------------------------------
 // FormData に対応していない
 // ------------------------------------------------------------
 if(!(window.FormData)) return;

 // ------------------------------------------------------------
 // FormData オブジェクトを作成する
 // ------------------------------------------------------------
 var form_data = new FormData();

 // ------------------------------------------------------------
 // 名前と値を指定してデータを追加する
 // ------------------------------------------------------------
 form_data.append("aaa" , "value_a");
 form_data.append("bbb" , "value_b");
 form_data.append("ccc" , "value_c");

 // ------------------------------------------------------------
 // XMLHttpRequest オブジェクトを作成
 // ------------------------------------------------------------
 var xhr = new XMLHttpRequest();

 // ------------------------------------------------------------
 // 「POST メソッド」「接続先 URL」を指定
 // ------------------------------------------------------------
 xhr.open("POST" , "http://example.com/cgi-bin/upload.cgi");

 // ------------------------------------------------------------
 // 送信データに FormData を指定、XHR 通信を開始する
 // ------------------------------------------------------------
 xhr.send(form_data);
})();