4

を使用$.ajaxしてフォームを送信していますが、フォーム入力の一部ではないいくつかのキーと値のペアを送信に追加したいと考えています。これらの余分なパラメータを連結する手法は問題なく機能しますが、$.extend. 問題は、後者を機能させることができないことです。

これは機能します:

var data = $form.serialize() + "&a=1&b=0.5";

これはしません:

var data = $.extend({}, $form.serialize(), {
    a: 1,
    b: 0.5
});

3 つのキーと値のペアがある場合に送信されたものを調べると、次のように表示されます。

t:test
a:1
b:0.5

t単一のフォーム入力フィールド (テキスト ボックス) の名前はどこにありますか。

関数を使用すると$.extend、検査により次のことがわかります。

0:t
1:=
2:t
3:e
4:s
5:t
a:1
b:0.5

私のアプリケーションはこの要求を好みません。この動作は予想されるものですか、それとも誰かが私が間違っていることを指摘できますか?

4

1 に答える 1

5

問題は.serialize()、jQueryフォームオブジェクトでのみ機能し、a内でシリアル化すると、フォーム.extend()のas値が取得[object] [object]されるためです(これは適切な方法ではないためです。2つの解決策を提示します。

最初の解決策 jQueryのフォームのクローンを作成し、それにアイテムを追加してシリアル化します

var $form = $('#form').clone()
          .append('<input name="foo" value="1" />')
          .append('<input name="bar" value="2" />')
          .serialize();

2番目の解決策 オブジェクトにフォームの値を入力してから、パラメーター化する

var data = $(foo:"value1", bar:"value2");
$('form').find(':input').each(function () {
    if (this.name) {
        data[this.name] = this.value;
    }
});

data = $.param(data)
于 2013-02-15T20:39:05.220 に答える