3

オブジェクトを として呼び出しに渡すdataajax、予期しない結果が得られます。何らかの理由で、値が配列の場合、jQuery はパラメーター名に角かっこを追加しています。例えば...

var obj =
    {
        name: "John Doe",
        courses: [ 1, 2, 4 ]
    };

...name=John+Doe&courses[]=1&courses[]=2&courses[]=4の代わりになりname=John+Doe&courses=1&courses=2&courses=4ます。

jQueryが角括弧を追加するのはなぜですか?

これが実際の例です:http://jsfiddle.net/BrHSy/

アップデート:

上記の例では、次の例のクエリ文字列に似た文字列が生成されると思います。

<html>
    <head></head>
    <body>
        <form method="GET">
            <input type="hidden" name="name" value="John Doe"/>
            <input type="hidden" name="courses" value="1"/>
            <input type="hidden" name="courses" value="2"/>
            <input type="hidden" name="courses" value="4"/>

            <button>Go!</button>
        </form>
    </body>
</html>

フォーム (www-form-urlencoded) によって生成されるクエリ文字列には角括弧がないことに注意してください。

4

1 に答える 1

4

私は自分の答えを見つけました。を使用してデータをエンコードする場合、jQueryのように見えますが、$.param具体的にはデータではありませんwww-form-urlencode。代わりにシリアル化しています。jQuery 1.4 より前では、結果は期待どおりでした。

したがって、私にとっての解決策は、代わりに以下を渡すことで従来のロジックを使用することtrueです。

$.param(obj, true);

これにより、次の結果が得られます。name=John+Doe&courses=1&courses=2&courses=4

を呼び出すときに、 jQuery が従来の方法でデータをエンコードするようにオプションを$.ajax()設定できます。jQueryの関数はデフォルトでコンテンツタイプを使用するため、これがデフォルトであるべきだったようです。しかし、データがサーバーに送信されたときの最終結果は、(同じ名前の複数の入力がある場合の HTML フォームの一般的な処理方法によると) 不正な形式のデータ チャンクです。traditionaltruetraditionalajaxwww-form-urlencodewww-form-urlencode

更新された例: http://jsfiddle.net/BrHSy/1/

于 2013-03-20T12:48:48.893 に答える