2009-10-05 42 views
6

tengo una llamada AJAX en el siguiente formato:¿Pasa arreglos como parámetros con jQuery AJAX?

$.get('/controller/method/', 
    { 
    parameter1: value1, 
    parameter2: value2 
    }, 
    function(data) { 
    if (data) { 
    } 
    else { 
    } 
}); 

¿Es posible pasar un array como parámetro?

parameter3: new Array(1, 2, 3) 
parameter4: new Array('one' => 1, 'two' => 2, 'three' => 3) 
+0

Ha intentado haciéndolo todavía? –

+0

Sí, solo tengo acceso al último parámetro de la matriz en el script PHP, haciendo referencia a él como, por ejemplo, $ _GET ['parameter3'] –

Respuesta

8

Es probable que tenga el nombre de su variable como "parámetro3 []" por el bien de PHP:

$.get('/controller/method/', 
    { 
    "parameter1": "value1", 
    "parameter2": "value2", 
    "parameter3[]": ["a","b","c"] 
    }, 
    function(data) { 
    if (data) { 
    } 
    else { 
    } 
}); 

$ _GET [ "parámetro3"] aparecerá en PHP como

Array 
(
    [0] => "a" 
    [1] => "b" 
    [2] => "c" 
) 
+0

¡Agradable! Funciona muy bien Ahora no tengo que preocuparme si mis valores de parámetro contienen valores de separador (por ejemplo, comas). Es un poco extraño tener que citar el nombre de la variable. –

+0

Bueno, a menos que escriba su propio deserializador de cadenas de consulta, esta es la manera estándar y única de tratar con entradas de formularios de múltiples valores, como casillas de verificación y selecciones. PHPland es de hecho un lugar extraño para vivir. – codehead

+0

Incluso he usado este método para el arreglo regular de pasadas – Manatax

0

Es posible enviar cualquier objeto JSON a través de un comando de envío ... incluso a un controlador MVC. La parte difícil es recibir los datos ... que puede necesitar deserializar manualmente en el servidor (ya sea en el controlador o con un filtro JSON.

This article (link) prácticamente todo lo que necesita saber sobre la deserialización de un objeto complejo en un parámetro para un método de controlador MVC. Léalo. Funciona muy bien.

+0

¡Ahhh! Acaba de agregar ahora que está haciendo esto en PHP, que mi enlace no le ayudará. Para PHP, debe interceptar el mensaje de solicitud que será su objeto JSON y luego deserializarlo en un objeto. – Evildonald

0

Primero que nada, creo que estás mezclando la sintaxis de JavaScript y PHP. Esto es probablemente lo que pretendías hacer para demostrar las matrices que pasan:

$.get('foo.htm', 
     { 
     parameter1: 'value1', 
     parameter2: 'value2', 
     parameter3: [1, 2, 3], 
     parameter4: {'one': 1, 'two': 2, 'three': 3} 
     }, 
     function(data) { 
     alert(data); 
     }); 

Curiosamente JQuery no le gusta el objeto anidado. Se crea una qu cadena de ery como esto:

foo.htm?parameter1=value1 
    &parameter2=value2 
    &parameter3=1 
    &parameter3=2 
    &parameter3=3 
    &parameter4=%5Bobject+Object%5D 

Para PHP pasar de ida y vuelta objetos complejos, recomiendo serializar el objeto de JavaScript usando un método JSON stringify y de-serializar en el back-end con json_decode.

Además, parece que está utilizando algún framework MVC. Si se trata de CodeIgniter y que está teniendo problemas con GET, considerar el uso de este método de ayuda postJSON:

$.postJSON = function(url, data, callback) { 
    $.post(url, data, callback, "json"); 
}; 
0

He estado en este camino antes. Unirse a su matriz con una coma (o cualquier carácter que funciona mejor para su escenario) y enviarlo como un único parámetro ...

var arr = [5, "x", 25]; 
var parms = { 
    parameter1: "value1", 
    parameter2: arr.join(","); 
} 

Y en el lado del servidor, la variable de entrada "parámetro2" se parecerá 5,x,25

Esta es una solución fácil para ambos lados del cable.

+0

La solución de Josh Stodola utilizando el método join() funcionó a la perfección. ¡Gracias! – pdelco

Cuestiones relacionadas