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