jQueryのserialize(),serializeArray()方法を説明する

jQuery jQuery
serialize() serializeArray()

jQuery 

私たちはAjaxを使用してバックエンドにデータを送信する場合、よくフォームデータを取得する必要があります。

フォームのデータが多くない場合は問題ありませんが、フォームフィールドが非常に多い場合、非常に面倒なことになります。大量のフォームデータをどのように取得するかは非常に重要なことです。

今回は3つの方法を紹介します。
  • 普通のやり方
  • serialize
  • serializeArray

順番に説明します。

フォームページ
	<form action="">
		<input type="text" name="username1">
		<input type="text" name="address1">
		<input type="text" name="age1">

		<input type="text" name="username2">
		<input type="text" name="address2">
		<input type="text" name="age2">
	</form>

	<button class="btn1">普通のやり方</button>
	<button class="btn2">serialize</button>
	<button class="btn3">serializeArray</button>

ここではフォームデータのみを取得し、送信は行いません。

1. 普通のやり方

シリアライズの方法を理解する前に、まず、一つのJavaScript関数を書いて、すべてのinputを1回反復処理して、オブジェクトを作成し、Ajaxでバックエンドに渡す。

	$(".btn1").click(function(){
		var inputs = $("input");
		var data={};
		for(var i=0;i<inputs.length;i++){
			var name =inputs.eq(i).attr("name");
			var value=inputs.eq(i).val();
			data[name]=value;
		}
		console.log(data);	
	})

結果確認

{username1: "a", address1: "b", age1: "c", username2: "d", address2: "e", …}

この方法でも目的を達成できるようですが、フォームにselect、checkboxなどのタイプのフィールドがある場合、取得するためにさらにコードを書く必要があるようです。

2. serialize()

serializeメソッドは、フォームを連結された文字列形式にシリアル化できます。

	$(".btn2").click(function(){
		var data = $("form").serialize();
		console.log(data);
	})

結果確認

username1=a&address1=b&age1=c&username2=d&address2=e&age2=f

この方法は、単純なフォームの処理には十分でしょう。

3. serializeArray()

serializeArray()メソッドは、フォームを特別なJSON配列にシリアル化することができます。このJSON配列には、nameとvalueが含まれます。

	$(".btn3").click(function(){
		var data = $("form").serializeArray()
		console.log(data);
	})

結果確認

	Array(6)
	0: {name: "username1", value: "a"}
	1: {name: "address1", value: "b"}
	2: {name: "age1", value: "c"}
	3: {name: "username2", value: "d"}
	4: {name: "address2", value: "e"}
	5: {name: "age2", value: "f"}

明らかに、この配列を処理する必要があります。そうすることで、より望ましいデータを得ることができます。

配列の処理
	$(".btn3").click(function(){
		var data = $("form").serializeArray()
		var newdata ={}
		data.map(function(val,key){
			newdata[val.name]=val.value;
		})
		console.log(newdata);
	})

結果確認

{username1: "a", address1: "b", age1: "c", username2: "d", address2: "e", …}

今、必要なデータを取得できましたので、安心してデータを渡すことができます。ただし、これで終わりではありません。 このコードは機能を実現していますが、簡潔でないようです。さらに最適化が必要です。

コードの最適化
	$(".btn3").click(function(){
		var data ={}
		$("form").serializeArray().map(function(val,key){
			data[val.name]=val.value;
		})
		console.log(data);
	})

結果確認

{username1: "a", address1: "b", age1: "c", username2: "d", address2: "e", …}

データの取得は完璧に成功し、コードも最適化されました。

コメント

タイトルとURLをコピーしました