4

$.ajax用来提交表单,但我想在提交中添加一些不属于表单输入的键值对。连接这些额外参数的技术效果很好,但似乎不如使用$.extend. 问题是我不能让后者工作。

这有效:

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

这不会:

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

当我检查在有效的情况下提交的内容时,我可以看到我有三个键值对:

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()将获得[object] [object]表单的 as 值(因为这不是正确的方法。我提出了两种解决方案:

第一个解决方案 克隆 jQuery 的表单,向其中添加项目并序列化

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

第二种解决方案 用表单的值填充一个对象,然后参数化

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 回答