0

注:これについては多くの質問を見てきましたが、それぞれがわずかに異なる回答を示しています。回答が異なるため、正規またはベストプラクティスとは何かを知りたいと思います。なぜ違いがあるのか​​、いつどちらを使用するのかについては、どれも明確ではありません。いくつかはちょうど時代遅れです。

Jqueryバージョン1.8.0、例ではcoffeescriptを使用しています。

私はデータを含むフォームを持っています。[送信]をクリックすると、データを取得して投稿する方法は、私が読んだ内容によると3つのうちの1つです:(以下の例に宣言されていない変数がある場合は、それらが他の場所に割り当てられた)

1:

data = $.param(form.serializeArray())
$.ajax( url, {
  headers: { 
    Accept : "application/json",
    "Content-Type": "application/json"
  },
  dataType: "json",
  type: "POST",
  data: data,

jquery .serializeArray();を投稿します。ajaxを介した出力

2.次の行を除いて、(1)と同じです。

data = JSON.stringify(form.serializeArray())

JQueryを使用してajaxを介してjson形式で投稿フォームデータを動的に送信する

3.次の行を除いて、(1)と同じです。

data = form.serialize()

http://api.jquery.com/jQuery.post/#example-3

これは、使用する方が良い理由を説明しているかもしれません$.paramが、jQuery1.4に関する古い投稿です。

4

1 に答える 1

0

これは、ajax呼び出しの前にパラメーターを構築するための(http://jquery.com/)バージョン1.8.2からのjqueryソースです。


function buildParams( prefix, obj, traditional, add ) {
    var name;

    if ( jQuery.isArray( obj ) ) {
        // Serialize array item.
        jQuery.each( obj, function( i, v ) {
            if ( traditional || rbracket.test( prefix ) ) {
                // Treat each array item as a scalar.
                add( prefix, v );

            } else {
                // If array item is non-scalar (array or object), encode its
                // numeric index to resolve deserialization ambiguity issues.
                // Note that rack (as of 1.0.0) can't currently deserialize
                // nested arrays properly, and attempting to do so may cause
                // a server error. Possible fixes are to modify rack's
                // deserialization algorithm or to provide an option or flag
                // to force array serialization to be shallow.
                buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
            }
        });

    } else if ( !traditional && jQuery.type( obj ) === "object" ) {
        // Serialize object item.
        for ( name in obj ) {
            buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
        }

    } else {
        // Serialize scalar item.
        add( prefix, obj );
    }
}

リストされたコードから、上記でリストされたすべての「方法」が、上記でリストされた関数内のパラメーターの処理内ですべて処理され、同じ文字列化されたバージョンになることがわかります。

于 2012-09-27T19:56:15.840 に答える