Сериализация формы в «хэш-формате» - PullRequest
6 голосов
/ 16 декабря 2010

В документации jeditable для параметра submitdata (параметр для включения некоторых дополнительных параметров в запрос ajax) говорится:

(Смешанный) 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"}

Есть ли способ сериализации формы в требуемом формате jeditable или быстрый способ изменить формат после сериализации?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 16 декабря 2010

Я могу решить это путем создания объекта из сериализованного массива, хотя я не знаю, будет ли это лучшим способом сделать это.

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());
}
2 голосов
/ 15 мая 2012

Решение, данное Javi, может соответствовать большинству случаев, кроме случаев, когда у вас есть входные данные с именами типа «inputname [key]».Вы получите ключ javascript {"inputname [key]": value}, за исключением {"inputname": {"key": value}}.Я предлагаю использовать плагин jquery jquery.serialize-hash.

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

...