2013-07-05 10 views
10

jQueryのserializeserializeObjectメソッドの間で完全な相違は見つかりませんでした。シリアライズとシリアライズオブジェクトjqueryの相違点

ご理解ください。

+2

jQueryの中核で 'serializeObject'という名前のメソッドを持っていません。もしそれを見ているのであれば、おそらくプラグインにあり、おそらく 'serialize'と同じことをします。 – SpYk3HH

+0

' serializeObject'はコアjquery関数ではありません。あなたはそのプラグインを手に入れましたが、いずれにせよ、それは比較の価値があるとは思わないでください。 –

+0

さらに詳しい情報が見つかりました[*** here ***](http://stackoverflow.com/questions/8900587/jquery-serializeobject-is-not-a-function-only-in-firefox) – SpYk3HH

答えて

24

hereが表示されているように、serializeObjectはネイティブjQueryメソッドではないため、サイトの以前のプログラマが挿入した場合にのみ存在します。 Q&A found hereに記載されているように、この関数は、おそらく誰かがあなたのサイト上で作業するとき「searched a way to serialize a form」発見し、以下の拡張子がわかった。

$.fn.serializeObject = function() 
{ 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() { 
     if (o[this.name]) { 
      if (!o[this.name].push) { 
       o[this.name] = [o[this.name]]; 
      } 
      o[this.name].push(this.value || ''); 
     } else { 
      o[this.name] = this.value || ''; 
     } 
    }); 
    return o; 
}; 

どこかにあなたのJSでserializeObjectを探しますが、メモして、それはおそらくとして必要ではないです $.fn.serialize と同じことをしているようです。


さらなるレビューで、私はそれが全く同じではないことを発見しました。 serializeObjectメソッドは他にもありますQ & Aはフォームの値をObjectとしてシリアル化しますが、serializeは値を送信用の文字列としてエンコードします。あなたはjQueryのコアにネイティブであるserailizeObjectのようなものをしたい場合

注意してください、、その後、serializeArrayを参照してください。

serializeArrayは、フォーム値のオブジェクトの配列を作成するという点で、結果が少し異なります。 { name: "", value: "" }

EXAMPLE

を持つ各オブジェクトの例ではDeveloperToolsConsoleを参照してください。

+0

'if(o [this.name])'の代わりに 'if(o.hasOwnProperty(this.name))'を使うべきです。同じ 'name'プロパティを持つグループの最初の入力が空の場合、2番目のバリアントは' false'になります。 –

+0

@ MaximPechenin:あなたが質問と答えを読んでくれたら、私はその方法を書かなかったでしょう。私はそれが単に私がオンラインで見つけることができる最も一般的な形式であるので、単にそれを参照します。その点は、OPが干渉の原因となっている方法がどこにあるかを特定するのを助けることでした。 – SpYk3HH

3

$.serializeObjectは、フォーム要素を文字列にエンコードするのではなく、フォーム要素をアプリケーションで使用できる有効なJSONオブジェクトに変換する既存の$.serializeメソッドの変形です。

2

私はいくつかのJSONオブジェクトにフォームをシリアライズするにStackOverflowの上ここに掘り行っていると私はこの方法を見つけてしまった

$.fn.serializeObject = function() 
{ 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() { 
     if (o[this.name]) { 
      if (!o[this.name].push) { 
       o[this.name] = [o[this.name]]; 
      } 
      o[this.name].push(this.value || ''); 
     } else { 
      o[this.name] = this.value || ''; 
     } 
    }); 
    return o; 
}; 

まだそれは私が働いていたものに収まりません。だから自分のプラグインを作った。あなたはhttps://github.com/citnvillareal/serializeObject

1

これをチェックアウトするかもしれないもの、あなたの興味のある場合は、私は、これは簡単な方法だと思います!TODO--

$.fn.serializeObject = function() { 
     var o = {}; 
     this.find("[name]").each(function() { 
      o[this.name] = this.value; 
     }); 
     return o; 
    };