Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Serialization $(this).serialize()--如何添加值?_Serialization_Jquery - Fatal编程技术网

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

Serialization $(this).serialize()--如何添加值?,serialization,jquery,Serialization,Jquery,目前我有以下几点: $.ajax({ type: 'POST', url: this.action, data: $(this).serialize(), }); 这很好,但是我想为数据添加一个值,所以我尝试了 $.ajax({ type: 'POST', url: this.action, data: $(this).serialize() + '&=NonFormValue' + NonFormValue, }); 但这并不正确。关

目前我有以下几点:

$.ajax({
    type: 'POST',
    url: this.action,
    data: $(this).serialize(),
});
这很好,但是我想为数据添加一个值,所以我尝试了

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

但这并不正确。关于如何将项添加到序列化字符串中,您有什么想法吗?这是一个非特定于表单的全局页面变量。

先添加项,然后序列化:

$.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,

其次,你可以使用

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

$(文档).onready(函数(){
$(“#添加表单”).submit(函数(事件){
event.preventDefault();
var formData=$(“form”).serializeArray();
formData=processFormData(formData);
//在此处编写进一步的代码---->
});
});
processFormData(formData)
{
var数据=formData;
data.forEach(函数(对象){
$(“#添加表单输入”)。每个(函数(){
if(this.name==object.name){
var nonformData=$(this).data(“nonformData”);
push({name:this.name,value:nonformData});
}
});
});
返回表单数据;
}

我们可以这样做:

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('&')

你能解释一下“那篇文章写得不对”是什么意思吗?怎么搞的?服务器收到了什么?这不应该是
”&NonFormValue='+NonFormValue
?您的第二个答案的效果与问题要求的效果不一样
NonFormValue
将作为URL参数发送,而不是在发布的数据中发送。如果a)服务器端运行的任何东西都希望它被发布(例如使用
request.POST
而不是Django中的
request.request
),那么这可能不理想,或者b)
NonFormValue
是出于安全原因或是因为它是一个临时值而不应该出现在URL栏或历史记录中的内容。这绝对是最好的选择-将序列化完全留给jQuery,虽然仍然能够向从表单中检索到的值添加新值。这是最好的方法,但不要玩Strings这应该是公认的答案。清洁并正确使用
encodeURIComponent
以确保
NonFormValue
没有任何特殊字符ID也不适用于我。虽然它扩展了对象,但没有按预期工作。请添加更详细的说明,说明为什么这是一种更好的方法。一行代码,您可以使用json对象获得更多参数。
data: [$(this).serialize(),$.param({NonFormValue: NonFormValue})].join('&')