Pasando una matriz de JavaScript a PHP a través de jQuery $ .ajax

79

Quiero manipular una matriz de JavaScript en PHP. ¿Es posible hacer algo como esto?

$.ajax({
       type: "POST",
       url: "tourFinderFunctions.php",
       data: "activitiesArray="+activities,
       success: function() {
            $("#lengthQuestion").fadeOut('slow');
       }
    });

Actividades es una matriz unidimensional como:

var activities = ['Location Zero', 'Location One', 'Location Two'];

El script no se completa cuando intento esto ... ¿Cómo puedo solucionarlo?

krx
fuente

Respuestas:

147
data: { activitiesArray: activities },

¡Eso es! Ahora puedes acceder a él en PHP:

<?php $myArray = $_REQUEST['activitiesArray']; ?>
Valentin Golev
fuente
10
¿¡Por qué fue tan difícil de encontrar esta respuesta !? Gracias, esto es exactamente lo que necesitaba.
Vian Esterhuizen
¡Tan simple como un hacker! ¡Bien hecho! Me hiciste reír de mí mismo: D.
Arashtad Ltd
12

Querrá codificar su matriz como JSON antes de enviarla, o simplemente obtendrá algo de basura en el otro extremo.

Dado que todo lo que está enviando es la matriz, puede hacer lo siguiente:

data: { activities: activities }

que convertirá automáticamente la matriz por usted.

Consulte aquí para obtener más detalles.

jvenema
fuente
11

Necesitas convertir esto en una cadena. Puede hacer esto usando el método stringify en la biblioteca JSON2.

http://www.json.org/

http://www.json.org/js.html

El código se vería así:

var myJSONText = JSON.stringify(myObject);

Entonces

['Location Zero', 'Location One', 'Location Two'];

Se convertirá:

"['Location Zero', 'Location One', 'Location Two']"

Tendrá que consultar a un gurú de PHP sobre cómo manejar esto en el servidor. Creo que otras respuestas aquí insinúan una solución.

Los datos se pueden devolver desde el servidor de forma similar. Es decir, puedes convertirlo de nuevo en un objeto.

var myObject = JSON.parse(myJSONString);
James Wiseman
fuente
9

Sé que puede ser demasiado tarde para responder a esto, pero esto funcionó para mí de una manera excelente:

  1. Stringifica tu objeto javascript (json) con var st = JSON.stringify(your_object);

  2. Pase sus datos POST como "cadena" (tal vez usando jQuery: $.post('foo.php',{data:st},function(data){... });

  3. Decodifica tus datos en el procesamiento del lado del servidor: $data = json_decode($_POST['data']);

Eso es todo ... puedes usar tus datos libremente.

Las matrices multidimensionales y las matrices individuales se manejan como matrices normales. Para acceder a ellos solo haz lo normal$foo[4] .

Las matrices asociativas (objetos javsacript) se manejan como objetos php (clases). Para acceder a ellos simplemente lo hacen como las clases: $foo->bar.

lu1s
fuente
2

Debería ser así:

$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer },
  function(response, status, xhr) {
    alert("POST returned: \n" + response + "\n\n");
  })
masterdany88
fuente
1

Utilice la función JQuery Serialize

http://docs.jquery.com/Ajax/serialize

Serializar se utiliza normalmente para preparar los datos de entrada del usuario para su publicación en un servidor. Los datos serializados están en un formato estándar que es compatible con casi todos los lenguajes y marcos de programación del lado del servidor .

Gazzer
fuente
1

Esto funcionó para mí:

$.ajax({
    url:"../messaging/delete.php",
    type:"POST",
    data:{messages:selected},
    success:function(data){
     if(data === "done"){

     }
     info($("#notification"), data);
    },
    beforeSend:function(){
         info($("#notification"),"Deleting "+count+" messages");
    },
    error:function(jqXHR, textStatus, errorMessage){
        error($("#notification"),errorMessage);
    }
});

Y esto para tu PHP :

$messages = $_POST['messages']
foreach($messages as $msg){
    echo $msg;
}
Yo Tyger
fuente
1

Utilice la funcionalidad incorporada de PHP de agregar el operando de la matriz al nombre de la variable deseada.

Si agregamos valores a una matriz de Javascript de la siguiente manera:

acitivies.push('Location Zero');
acitivies.push('Location One');
acitivies.push('Location Two');

Se puede enviar al servidor de la siguiente manera:

$.ajax({        
       type: 'POST',
       url: 'tourFinderFunctions.php',
       'activities[]': activities
       success: function() {
            $('#lengthQuestion').fadeOut('slow');        
       }
});

Observe las citas sobre actividades []. Los valores estarán disponibles de la siguiente manera:

$_POST['activities'][0] == 'Location Zero';
$_POST['activities'][1] == 'Location One';
$_POST['activities'][2] == 'Location Two';
chelista
fuente
0

Esto se debe a que PHP lee su valor como una cadena. Si no quiero pasar mis datos como un objeto (como en las respuestas anteriores, que también están bien), simplemente hago esto en mi PHP:

 $activitiesString = $_POST['activitiesArray'];
 $activitiesArray = (explode(",",$activitiesString));

La última línea divide la cadena en bits después de cada coma. Ahora $ activitiesArray también es una matriz. Funciona incluso si no hay coma (solo un elemento en su matriz de JavaScript).

¡Feliz codificación!

Espino
fuente