2010-12-16 12 views
6

En la documentación de jeditable para el parámetro submitdata (un parámetro para incluir algunos parametros adicionales en la solicitud Ajax) se dice:Serialize en un "formato de hash"

(mixta) submitdata: Parámetros extra al enviar contenido. Puede ser un hash o función que devuelve un hash.

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

por eso es necesario incluir en los submitData algunos parametros que he recuperarse de la serialización de un formulario:

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

así que cuando preparo la submitdata yo:

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

El problema es que serializar el formulario de esta manera resulta en un formato como:

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

pero jeditable no lo entiende y lo envía en la solicitud

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

he tratado con la función serialize() pero no lo entiende bien porque Jeditable requiere algo como:

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

¿Hay alguna manera de serializar el formulario en el formato requerido jeditable o una forma rápida de cambiar el formato después de la serialización?

Gracias.

Respuesta

4

Lo puedo resolver construyendo un objeto a partir del conjunto serializado, aunque no sé si sería la mejor manera de hacerlo.

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

La solución dada por Javi puede coincidir con la mayoría de los casos, excepto si tiene entradas con nombres como "nombre de entrada [clave]". Obtendrá una clave de JavaScript {"nombre de entrada [clave]": valor} excepto de {"nombre de entrada": {"clave": valor}}. Sugiero usar el plugin jquery jquery.serialize-hash.

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