2012-06-14 24 views
24

Actualmente, en todas partes I utilizar serialize tengo que utilizar de esta manera:jQuery serialize convierte todos los espacios para más

.serialize() en lugar de (/ +/g, '% 20');.

de lo contrario, cualquier espacio en los datos del formulario se convertirá en + 's. ¿Hay alguna configuración que pueda hacer que esto sea el predeterminado?

Respuesta

0

No crea que hay un valor predeterminado, deberá codificar la cadena en one of these ways.

Aunque se podría crear su propio plugin:

jQuery.fn.serializeAndEncode = function() { 
    return escape(this.serialize()); 
} 

$(myForm).serializeAndEncode(); 
+2

Por favor, no use 'fuga '. Ha sido [obsoleta durante muchos años] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions#escape_and_unescape_functions (Obsoleted_above_JavaScript_1.5) y debe reemplazarse por 'encodeURIComponent' como en El ejemplo de Matt Roy. – Husky

1

que tenía que hacer lo mismo. La solución que Terry dio, con escape(), no funciona. The = y & están siendo codificados (no queremos eso) y los + aún están allí.

Lo que hice es crear mi propia función para serializar:

var QueryString = ""; 
$(selector).each(function(index) { 
    if(QueryString != "") QueryString += "&"; 
    QueryString += $(this).get(0).id + "=" + encodeURIComponent($(this).val()); 
}); 
3

Para la diversión, aquí es una alternativa que no utiliza una variable temporal:

$.fn.serializeAndEncode = function() { 
    return $.map(this.serializeArray(), function(val) { 
     return [val.name, encodeURIComponent(val.value)].join('='); 
    }).join('&'); 
}; 

$("#formToSerialize").serializeAndEncode(); 
+0

Esto era exactamente lo que estaba haciendo yo solo. –

Cuestiones relacionadas