2011-03-15 11 views
6

Tengo un objeto en Javascript que estoy tratando de AJAX POST a un script de PHP. Todo funcionó en jQuery 1.4.1 pero ahora en 1.4.4 o superior, todas las matrices vacías u objetos vacíos llegan como una cadena (0) que es incorrecta.jQuery 1.4.4+ solicitud de AJAX - publicar matriz vacía u objeto se convierte en cadena

JS:

$(document).ready(function() { 
var obj = {}; 
obj.one = []; 
obj.two = {}; 
obj.three = []; 
obj.three.push('one'); 
obj.three.push('two'); 
obj.three.push('three'); 
obj.four = "onetwothree"; 

$.ajax({ 
    type: 'POST', 
    url: 'ajax.php', 
    data: obj, 
    success: function(data) { 
     alert(data); 
    }, 
}); 
}); 

PHP:

<?php 
var_dump($_POST); 
?> 

RESPUESTA:

array(4) { 
    ["one"]=> string(0) "" 
    ["two"]=> string(0) "" 
    ["three"]=> array(3) { 
    [0]=> string(3) "one" 
    [1]=> string(3) "two" 
    [2]=> string(5) "three" 
    } 
    ["four"]=> string(11) "onetwothree" 
} 

En la versión 1.4.1 sería simplemente no envía ["uno"] o ["dos"], pero ahora en las versiones más nuevas, el hecho de que llegue como una cadena arroja toda la aplicación. ¿Hay algo que pueda hacer para que una matriz vacía ([]) llegue a PHP como una matriz vacía ([]) y lo mismo con objetos de JavaScript?

+1

Hola. ¿Encontraste alguna solución a este problema? También estoy interesado en esto. Antes de ver su publicación, ya publiqué [esto] (http://stackoverflow.com/questions/9179473/why-jquery-ajax-does-not-serialize-my-object). –

Respuesta

2

establecer la opción traditional a true Probar:

$.ajax({ 
    type: 'POST', 
    traditional: true, 
    url: 'ajax.php', 
    data: obj, 
    success: function(data) { 
     alert(data); 
    } 
}); 

Para consultar todas las opciones data y traditional del newer API.

Y elimine la coma adicional después de la devolución de llamada success si quiere que las cosas funcionen en IE7.

+0

Gracias Karim79, traté de cambiar el tradicional a verdadero, pero el conjunto y el objeto vacíos seguían apareciendo como una cadena (0) pero ahora mi matriz anidada se convirtió en [object Object]. –

3

intente aplicar JSON.stringify a los parámetros pasados ​​

data: JSON.stringify (obj), 

Nota es probable que desee incluir la opción para pedir contentType: "application/json" lado del servidor para procesar los datos correctamente.

citando: Why jQuery ajax does not serialize my object?

tradicional: verdadero es totalmente erróneo, ya que nunca se puede manejar jerarquías de objetos. Lo que obtienes en su lugar es: ... & key = [object Object], que es el resultado predeterminado de javascript toString() para todos los objetos.

Cuestiones relacionadas