以jquery形式更新值序列化

时间:2011-05-18 17:45:31

标签: jquery

我正在使用$("#formid").serialize()返回一个字符串,我需要在进行ajax调用之前用不同的值覆盖此字符串中的一个值。

我应该使用serializeArray()吗?如果是这样,我如何在更新数组值后得到一个字符串?

1 个答案:

答案 0 :(得分:1)

如果这是条件覆盖,则可以使用隐藏字段。根据条件,将覆盖值或实际值存储在隐藏字段中。然后在服务器端,查看隐藏字段的值,而不是用户可见的输入字段。

或者,您可以在序列化之前更改字段的值,然后在调用jQuery.ajax后将其还原。

第一个选项对我来说似乎更清晰。

<强>更新

如果您不想更改视图模型,则选项2是最简单的方法。还有其他方法:

  1. 使用正则表达式替换值:serializedString.replace(/FieldName=[^&]+/, "FieldName=" + overridingValue);

  2. 拆分字符串并检查每个属性。这更费时,更冗长,但你可以确定你正在覆盖正确的领域:

    var nameValuePairs = serializedString.split(/&/);
    var newSerializedString = "";
    
    for(var i = 0; i < nameValuePairs.length; i++) {
        var namveValuePair = nameValuePairs[i];
        var entry = nameValuePair.split(/=/);
        var key = entry[0];
    
        if(key == "FieldName") {
           entry = "FieldName=" + overridingValue;
        }
    
        newSerializedString += entry + "&";
    }
    
    newSerializedString = newSerializedString.replaced(/&$/, "");
    
  3. IMO,这似乎很多工作,所以我仍然选择2!