2010-11-20 6 views
17

私はこのjQuery-AJAXコードとフォームを持っています:なぜserialize()はjQuery.ajax()のポストデータを設定するときにserializeArray()と同じ効果がありますか?

<script type="text/javascript"> 
$(document).ready(function() { 
    $('form').submit(function() { 
     form_data = $(this).serializeArray(); 

     $.ajax({ 
      url: "/frontend_dev.php/coche1/update/id/1", 
      type: "POST", 
      data: form_data 

      }); 
     }); 
     return false; 

}); 
</script> 

ご覧のとおり、serializeArray()を使用していますが、serialize()を使用しても同じ動作をします..

同じ?それらのうちの何を私は使用すべきですか?

symfonyをPHPフレームワークとして使用しています。あなたが必要な場合は私はあなたに多くの情報を提供することができます。

答えて

16

オブジェクト/配列が渡された場合(.serializeArray()が返されます)、それは$.param()によってシリアル化されます。

文字列が渡された場合(.serialize()が返されます)、これ以上何もしません。

... dataプロパティとして渡されたときと同じ効果があります。 You can find the relevant check here:1あなたが使用する必要があります

// convert data if not already a string 
    if (s.data && s.processData && typeof s.data !== "string") { 
     s.data = jQuery.param(s.data, s.traditional); 
    } 

実際にははここでは関係ありません。.serialize() makes the same $.param() callのように、まったく同じ量の作業を行います。私は個人的に.serialize()を使用しています。タイプするのが簡単ではないからです。

0

私は、CodeIgniterの.serializeメソッドが、CodeIgniterのCSRF保護によって汚染されたデータを生成することに気付きました。(CodeIgniterは何とかセミコロンを配列キーに追加しますが).serializeArrayで送信したフォームはこの問題はありません。

また、複雑なPOST名を使用している場合(例: $ _POST配列内の場所が変更され、恣意的でないところで、名前を "some [a] [data] [structure]"とすると、おそらく.serializeを使用する方がPHPデータ構造に戻すことができるので簡単に。

3

この場合も同じです。しかし、タイプを指定しなければ大きな違いがあります - シリアライズはGETを行い、serializeArrayはPOSTを行います!

関連する問題