6

在提交数据参数(在 ajax 请求中包含一些额外参数的参数)的 jeditable 文档中,它说

(混合) submitdata:提交内容时的额外参数。可以是散列或返回散列的函数。

 $(".editable").editable("http://www.example.com/save.php";,
     {    
         submitdata : {foo: "bar"}; 
 });

 $(".editable").editable("http://www.example.com/save.php";,
     {    
         submitdata : function(value, settings) {
             return {foo: "bar"};    
     } 
 });

所以我需要在 submitData 中包含一些我从表单序列化中恢​​复的参数:

<form id="myForm">
     <input type="hidden" name="param1" value="myValue1"/>
     <input type="hidden" name="param2" value="myValue2"/>
</form>

所以当我准备提交数据时,我会:

submitdata : function(value, settings){
    return $("#myForm").serializeArray();
}

问题是以这种方式序列化表单会导致格式如下:

[Object { name="param1", value="myValue1"}, Object { name="param2", value="myValue2"}]

但 jeditable 不理解它并发送请求

0[name] param1
0[value]    myValue1
1[name] param2
1[value]    myValue2

我尝试过使用 serialize() 函数,但它也不理解它,因为 Jeditable 需要类似的东西:

{param1: "value1" , param2: "value2"}

有没有办法以可编辑的所需格式序列化表单,或者在序列化后快速更改格式?

谢谢。

4

2 回答 2

6

我可以解决它从序列化数组构建一个对象,但我不知道这是否是最好的方法。

submitdata : function(value, settings){
    var reformat = function(array){
        var obj = {};
        for(i=0; i<array.length; i++){
            var a = array[i];
            var name = a.name;
            var value = a.value;
            obj[name] = value;
        }
        return obj;
    };
    return reformat($("#myForm").serializeArray());
}
于 2010-12-16T10:06:32.447 回答
3

Javi 给出的解决方案可以匹配大多数情况,除非您的输入名称为“inputname [key]”。你会得到一个 javascript 键 {"inputname[key]": value} 除了 {"inputname": {"key": value} }。我建议使用 jquery 插件 jquery.serialize-hash。

https://github.com/sdrdis/jquery.serialize-hash

于 2012-05-15T08:31:30.203 回答