HTML5 FormData メソッドの紹介

XMLHttpRequest は、HTTP (S) 通信用の Javascript を有効にするためのブラウザー インターフェイスです。XMLHttpRequest は、今日のブラウザーでフロントエンドとバックエンドの対話データに一般的に使用されている方法です。2008 年 2 月に XMLHttpRequest レベル 2 のドラフトが提案されました. 前世代と比較して, いくつかの新しい機能が追加されています. その中で, FormData は XMLHttpRequest レベル 2 の新しいオブジェクトです. これを使用してフォームを送信し, フォーム送信をシミュレートします. もちろん,最大の利点は、バイナリ ファイルをアップロードできることです。以下では、FormData を使用してファイルをアップロードする方法を具体的に紹介します。

FormData アップロード ファイル インスタンス

まず、formData の基本的な使い方を見てみましょう。FormData オブジェクトは、すべてのフォーム要素の名前と値を queryString に結合し、それをバックグラウンドに送信できます。フォーム form をパラメーターとして FormData コンストラクターに渡すだけです。

var form = document.getElementById("form1");
var fd = new FormData(form);

コピー

このように、afd は ajax の send() メソッドを介して直接バックグラウンドに送信できます。

以下は、フォーム フォームを作成します。通常のデータに加えて、フォームにはファイルのアップロードがあります。フォーム オブジェクトをパラメータとして FormData オブジェクトに直接渡します。

<form name="form1" id="form1">  
<p>name:<input type="text" name="name" /></p>  
<p>gender:<input type="radio" name="gender" value="1" />male <input type="radio" name="gender" value="2" />female</p>
<p>stu-number:<input type="text" name="number" /></p>  
<p>photo:<input type="file" name="photo" id="photo"></p>  
<p><input type="button" name="b1" value="submit" onclick="fsubmit()" /></p>  
</form>  
<div id="result"></div>

コピー

上記のコードは、フォームを作成し、単にいくつかの情報を入力し、アバターとして画像を選択し、返された結果を格納する div を設定します。

簡単にするために、jquery でカプセル化された ajax を使用してデータをバックグラウンドに転送します。

function fsubmit() { 

var form=document.getElementById("form1");
var fd =new FormData(form);
$.ajax({
url: "server.php",
type: "POST",
data: fd,
processData: false,  // 告诉jQuery不要去处理发送的数据
contentType: false,   // 告诉jQuery不要去设置Content-Type请求头
success: function(response,status,xhr){ 

console.log(xhr);
var json=$.parseJSON(response);
var result = '';
result +="个人信息:<br/>name:"+json['name']+"<br/>gender:"+json['gender']+"<br/>number:"+json['number'];
result += '<br/>头像:<img src="' + json['photo'] + '" height="100" style="border-radius: 50%;" />';
$('#result').html(result);
}
});
return false;
}

コピー

上記のコードの server.php は、 ajax リクエストを受け取り、受け取った結果を返すサーバー側のファイルで、具体的なコードは次のとおりです。

<?php $name = isset($_POST['name'])? $_POST['name'] : ''; $gender = isset($_POST['gender'])? $_POST['gender'] : ''; $number = isset($_POST['number'])? $_POST['number'] : ''; $filename = time().substr($_FILES['photo']['name'], strrpos($_FILES['photo']['name'],'.')); $response = array(); if(move_uploaded_file($_FILES['photo']['tmp_name'], $filename)){ $response['isSuccess'] = true; $response['name'] = $name; $response['gender'] = $gender; $response['number'] = $number; $response['photo'] = $filename; }else{ $response['isSuccess'] = false; } echo json_encode($response); ?>

コピー

情報を入力した後、送信をクリックすると、ページに次のような効果が得られ、サーバー側の対応するフォルダーにアップロードされた写真を見つけることもできます。

もちろん、ネイティブの JavaScript 愛好家であれば、上記の機能を実現できます。以下は簡単な JavaScript 実装コードです。

function fsubmit() { 

var form=document.getElementById("form1");
var formData=new FormData(form);
alert(formData.name);
var oReq = new XMLHttpRequest();
oReq.onreadystatechange=function(){ 

if(oReq.readyState==4){
if(oReq.status==200){
console.log(typeof oReq.responseText);
var json=JSON.parse(oReq.responseText);
var result = '';
result +="个人信息:<br/>name:"+json['name']+"<br/>gender:"+json['gender']+"<br/>number:"+json['number'];
result += '<br/>头像:<img src="' + json['photo'] + '" height="50" style="border-radius: 50%;" />';
$('#result').html(result);
}
}
};
oReq.open("POST", "server.php");
oReq.send(formData); 
return false;
}

コピー

FormData オブジェクト メソッドの概要

FormData には、上記の新しいオブジェクトを作成するときにフォームをパラメーターとして直接渡す以外に、他の関数があります。インターネット上の FormData の紹介に関する記事のほとんどは append() メソッドについてのみ言及していますが、FormData オブジェクトにはどのようなメソッドがあるのでしょうか。私たちは知っています:

コンソールの後で、FormData オブジェクトにそのようなメソッドがあることを発見したので、真実を見つけるために自分でテストする必要があります. 以下、これらのメソッドを 1 つずつ説明します。

1、追記()

キーと値のペアを FormData オブジェクトに追加するには、append() メソッドを使用します。

fd.append('key1',"value1");
fd.append('key2',"value2");

コピー

fd は FormData オブジェクトであり、新しく作成された空のオブジェクトにすることも、フォーム フォームまたはその他のキーと値のペアを既に含めることもできます。

2、set()

対応するキーのキー値に対応する値を設定します

fd.set('key1',"value1");
fd.set('key2',"value2");

コピー

append() メソッドに少し似ています. 2 つの違いは、指定されたキー値が存在する場合、append() メソッドは新しく追加されたすべてのキーと値のペアを末尾に追加し、set() メソッドはメソッドは、以前の設定を上書きするキーと値のペアです。または、例を比較して、前の形式に基づいて新しいキーと値のペアを追加 () または設定 () します。

fd.append('name',"will");

コピー

キーが名前である 2 つのキーと値のペアがあります。

fd.set('name',"will");

コピー

name をキーとするキーと値のペアは 1 つだけです。

上記は、append() と set() の違いです。設定されたキー値が存在しない場合、2 つの効果は同じです。

3、削除()

削除するキー値の名前を示すパラメータを受け取ります。同じキー値が複数ある場合は、まとめて削除されます。

fd.append('name','will');
fd.delete('name');

コピー

フォーム内の名前情報とappend()で追加された名前情報を削除します。

4. get() と getAll()

検索するキーの名前を示すパラメーターを受け取り、そのキーに対応する最初の値を返します。同じキーが複数ある場合、このキーに対応するすべての値を返す必要があります。

また、上記のフォームフォームに基づいています。

fd.append('name','will');
console.log(fd.get('name')); // sean

コピー

fd.append('name','will');
console.log(fd.getAll('name')); // ["sean", "will"]

コピー

5、ハズ()

このメソッドは、キーの名前でもあるパラメータを受け取り、FormData オブジェクトにキーが含まれているかどうかを判断するために使用されるブール値を返します。上記のフォームを例にとります。

console.log(fd.has('name')); // true
console.log(fd.has('Name')); // false

コピー

6、キー()

このメソッドはパラメーターを受け取る必要はなく、FormData オブジェクト内のすべてのキーをトラバースできる反復子を返します。上記のフォームを例にとります。

for (var key of fd.keys()) {
console.log(key); 
}

コピー

結果は次のとおりです。

name
gender
number
photo

コピー

7、値()

キーをトラバースするためのイテレーションがあり、もちろん値をトラバースするためのイテレータは不可欠です。values() は、値をトラバースするための反復子であり、その使用法は keys() に似ています。

for (var value of fd.values()) {
console.log(value); 
}

コピー

結果:

8、エントリー()

キーをトラバースするためのイテレータと値をトラバースするためのイテレータがあります。両方の組み合わせを作成してみませんか! entry() は、キーと値のペアを含む反復子を返します。

for(var pair of fd.entries()) {
console.log(pair[0]+ ', '+ pair[1]); 
}

コピー

結果:

FormData の互換性の問題

FormDataはXMLHttpRequest Level 2の新たに追加されたインターフェースであるため、IE10以下のIEブラウザはFormDataに対応していません.上記で紹介したFormDataオブジェクトのメソッドについては、IEブラウザでテストした結果未対応です.具体的には主要なブラウザの対応状況次の図を参照できます。

おすすめ

転載: blog.csdn.net/2301_76965813/article/details/130544227