2010-01-06 57 views
72

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 guión no se completa cuando intento esto ... ¿Cómo puedo solucionarlo?

+0

posible duplicado de [pasar una cadena a una variable PHP Javascript (y escapar de los saltos de línea)] (http://stackoverflow.com/questions/168214/pass-a-php -string-a-javascript-variable-and-escape-newlines) – Anthon

Respuesta

134
data: { activitiesArray: activities }, 

Eso es todo! Ahora se puede acceder a él en PHP:

<?php $myArray = $_REQUEST['activitiesArray']; ?> 
+10

¿Por qué fue tan difícil de encontrar esta respuesta? Gracias, esto es exactamente lo que necesitaba. –

9

Tiene que convertir esto en una cadena. Puede hacerlo utilizando el método stringify en la biblioteca JSON2.

http://www.json.org/

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

El código sería algo como:

var myJSONText = JSON.stringify(myObject); 

Así

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

se convertirá en:

"['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í son una solución.

Los datos pueden devolverse desde el servidor de forma similar. Es decir. puedes volver a convertirlo en un objeto.

var myObject = JSON.parse(myJSONString); 
+0

Duro, esta fue de hecho una buena respuesta :) – atjoshi

10

Usted querrá para codificar su matriz como JSON antes de enviarlo, o vas a tener un poco de chatarra en el otro extremo.

Dado que todo va a enviar es la matriz, que sólo puede hacer:

data: { activities: activities } 

que convertirá automáticamente el array para usted.

Consulte here para obtener más detalles.

1

Utilice la función JQuery Serialize

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

Serialize se utiliza típicamente para preparar datos de entrada de usuario para ser enviado a un servidor . Los datos serializados están en un formato estándar que es compatible con casi todos los lenguajes de programación del lado del servidor y frameworks.

8

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

  1. stringify su JSON (JavaScript Object) con var st = JSON.stringify(your_object);

  2. Pase su Datos de POST como "cadena" (quizás usando jQuery: $.post('foo.php',{data:st},function(data){... });

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

Eso es todo ... puede usar libremente sus datos.

Las matrices multidimensionales y las matrices simples 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 hazlo como clases: $foo->bar.

0

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 su PHP:

$messages = $_POST['messages'] 
foreach($messages as $msg){ 
    echo $msg; 
} 
0

que debe ser así:

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

uso del PHP integrado funcionalidad de anexar el operando de matriz al nombre de variable deseado.

Si sumamos los valores de una matriz de JavaScript de la siguiente manera:

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

Puede ser enviado al servidor de la siguiente manera:

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

Aviso las comillas alrededor de las actividades []. Los valores estarán disponibles como sigue:

$_POST['activities'][0] == 'Location Zero'; 
$_POST['activities'][1] == 'Location One'; 
$_POST['activities'][2] == 'Location Two'; 
Cuestiones relacionadas