2010-11-20 5 views
17

tengo este código jQuery AJAX abajo y un formulario:¿Por qué serialize() tiene el mismo efecto que serializeArray() cuando se establecen datos de publicación para jQuery.ajax()?

<script type="text/javascript"> 
$(document).ready(function() { 
    $('form').submit(function() { 
     form_data = $(this).serializeArray(); 

     $.ajax({ 
      url: "/frontend_dev.php/coche1/update/id/1", 
      type: "POST", 
      data: form_data 

      }); 
     }); 
     return false; 

}); 
</script> 

Como se puede ver que estoy usando serializeArray() pero cuando se utiliza serialize() también funciona de la misma ..

¿Por qué en ambos casos funciona igual? ¿Qué de ellos debería usar?

Im utilizando Symfony como framework php. Puedo ofrecerte más información si la necesitas.

Respuesta

16

Si se pasa un objeto/matriz (que devuelve .serializeArray()), se serializa a través de $.param().

Si se pasa una cadena (que .serialize() devuelve) no hace nada más.

... por lo que tienen el mismo efecto cuando se pasa como la propiedad data. You can find the relevant check here:

// convert data if not already a string 
    if (s.data && s.processData && typeof s.data !== "string") { 
     s.data = jQuery.param(s.data, s.traditional); 
    } 

¿Cuál debe usar? Es realmente no importa aquí, .serialize() makes the same $.param() call, por lo que hacen la misma cantidad de trabajo. Yo personalmente uso .serialize() porque es simplemente menos de escribir.

0

He notado que en CodeIgniter, el método .serialize puede producir datos que se contaminan con la protección CSRF de CodeIgniter (CodeIgniter de alguna manera agrega puntos y comas a las teclas de matriz), mientras que los formularios que he enviado con .serializeArray no tiene este problema

Además, si está utilizando nombres POST complejos, p. name = "alguna [a] [datos] [estructura]" donde los lugares en la matriz $ _POST cambian y no son arbitrarios, entonces usar .serialize probablemente será mucho más fácil porque puedes convertirlo de nuevo a una estructura de datos PHP mucho más fácilmente.

3

En este caso, son lo mismo. Pero hay una gran diferencia si no especifica el tipo: serialize hará un GET y serializeArray hará un POST!

Cuestiones relacionadas