$(this).serialize() - 如何添加值?

The*_*xit 94 jquery serialization

目前我有以下内容:

$.ajax({
    type: 'POST',
    url: this.action,
    data: $(this).serialize(),
});
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我想为数据添加一个值,所以我尝试了

$.ajax({
    type: 'POST',
    url: this.action,
    data: $(this).serialize() + '&=NonFormValue' + NonFormValue,
});
Run Code Online (Sandbox Code Playgroud)

但这没有正确发布.关于如何将项添加到序列化字符串的任何想法?这是一个非特定于表单的全局页面变量.

Lei*_*cki 174

虽然matt b的答案可行,但您也可以使用.serializeArray()从表单数据中获取数组,修改它,并使用jQuery.param()它将其转换为url编码形式.这样,jQuery就可以为您处理额外数据的序列化.

var data = $(this).serializeArray(); // convert form to array
data.push({name: "NonFormValue", value: NonFormValue});
$.ajax({
    type: 'POST',
    url: this.action,
    data: $.param(data),
});
Run Code Online (Sandbox Code Playgroud)

  • 这绝对是最好的选择 - 将序列化完全留给jQuery,同时仍然能够为从表单中检索的值添加新值. (14认同)
  • 这是最好的方法,不玩字符串 (5认同)

mat*_*t b 93

代替

 data: $(this).serialize() + '&=NonFormValue' + NonFormValue,
Run Code Online (Sandbox Code Playgroud)

你可能想要的

 data: $(this).serialize() + '&NonFormValue=' + NonFormValue,
Run Code Online (Sandbox Code Playgroud)

NonFormValue如果它可能包含任何特殊字符,您应该小心对URL进行URL编码.

  • 使用“encodeURIComponent”确保“NonFormValue”没有任何特殊字符 (3认同)

Mrc*_*ief 6

首先添加项目,然后序列化:

$.ajax({
    type: 'POST',
    url: this.action,
    data: $.extend($(this), {'NonFormValue': NonFormValue}).serialize()
});
Run Code Online (Sandbox Code Playgroud)


Nik*_*ari 6

首先不应该

data: $(this).serialize() + '&=NonFormValue' + NonFormValue,
Run Code Online (Sandbox Code Playgroud)

data: $(this).serialize() + '&NonFormValue=' + NonFormValue,
Run Code Online (Sandbox Code Playgroud)

其次你可以使用

url: this.action + '?NonFormValue=' + NonFormValue,
Run Code Online (Sandbox Code Playgroud)

或者如果操作已包含任何参数

url: this.action + '&NonFormValue=' + NonFormValue,
Run Code Online (Sandbox Code Playgroud)


小智 6

我们可以这样做:

data = $form.serialize() + "&foo=bar";
Run Code Online (Sandbox Code Playgroud)

例如:

var userData = localStorage.getItem("userFormSerializeData");
var userId = localStorage.getItem("userId");

$.ajax({
    type: "POST",
    url: postUrl,
    data: $(form).serialize() + "&" + userData + "&userId=" + userId,
    dataType: 'json',
    success: function (response) {
        //do something
    }
});
Run Code Online (Sandbox Code Playgroud)


Jon*_*han 5

不要忘记,您可以随时这样做:

<input type="hidden" name="NonFormName" value="NonFormValue" />
Run Code Online (Sandbox Code Playgroud)

以您的实际形式显示,根据情况,这可能更适合您的代码。