$(this) . seralize()——如何添加值?

目前我有以下资料:

$.ajax({
type: 'POST',
url: this.action,
data: $(this).serialize(),
});

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

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

但是没有正确发布。对于如何向序列化字符串中添加项有什么想法吗?这是一个不特定于表单的全局页面变量。

133294 次浏览

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

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

而不是

 data: $(this).serialize() + '&=NonFormValue' + NonFormValue,

你可能想要

 data: $(this).serialize() + '&NonFormValue=' + NonFormValue,

如果 NonFormValue的值可能包含任何特殊字符,则应该注意对其进行 URL 编码。

首先不应该

data: $(this).serialize() + '&=NonFormValue' + NonFormValue,

data: $(this).serialize() + '&NonFormValue=' + NonFormValue,

其次,你可以利用

url: this.action + '?NonFormValue=' + NonFormValue,

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

url: this.action + '&NonFormValue=' + NonFormValue,

虽然 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),
});

不要忘记你总是可以做:

<input type="hidden" name="NonFormName" value="NonFormValue" />

根据实际情况,这可能更适合您的代码。

您可以编写一个额外的函数来处理表单数据,您应该将非表单数据作为数据值添加到 form.see 示例:

<form method="POST" id="add-form">
<div class="form-group required ">
<label for="key">Enter key</label>
<input type="text" name="key" id="key"  data-nonformdata="hai"/>
</div>
<div class="form-group required ">
<label for="name">Ente Name</label>
<input type="text" name="name" id="name"  data-nonformdata="hello"/>
</div>
<input type="submit" id="add-formdata-btn" value="submit">
</form>

然后为表单处理添加这个 jquery

<script>
$(document).onready(function(){
$('#add-form').submit(function(event){
event.preventDefault();
var formData = $("form").serializeArray();
formData = processFormData(formData);
// write further code here---->
});
});
processFormData(formData)
{
var data = formData;
data.forEach(function(object){
$('#add-form input').each(function(){
if(this.name == object.name){
var nonformData = $(this).data("nonformdata");
formData.push({name:this.name,value:nonformData});
}
});
});
return formData;
}

我们可以这样做:

data = $form.serialize() + "&foo=bar";

例如:

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
}
});

最好是这样:

data: [$(this).serialize(),$.param({NonFormValue: NonFormValue})].join('&')