$(this).serialize() – 如何添加一个值?

目前我有以下几点:

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

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

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

但是这并没有正确发布。 关于如何添加一个项目到序列化string的任何想法? 这是一个全局的页面variables,不是特定于表单的。

代替

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

你可能想要

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

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

虽然马特b的答案将工作,您也可以使用.serializeArray()从表单数据获取数组,修改它,并使用jQuery.param()将其转换为URL编码的forms。 这样,jQuery为您处理额外数据的序列化。

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

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

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

首先不应该

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

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

其次你可以使用

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

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

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

不要忘记你可以随时做到:

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

在你的实际forms,这可能会更好的代码取决于案件。

你可以编写一个额外的函数来处理表单数据,你应该在表单中添加你的非forms数据作为数据值。例如:

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