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?
php
javascript
jquery
ajax
krx
fuente
fuente
Respuestas:
data: { activitiesArray: activities },
¡Eso es! Ahora puedes acceder a él en PHP:
<?php $myArray = $_REQUEST['activitiesArray']; ?>
fuente
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.
fuente
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);
fuente
Sé que puede ser demasiado tarde para responder a esto, pero esto funcionó para mí de una manera excelente:
Stringifica tu objeto javascript (json) con
var st = JSON.stringify(your_object);
Pase sus datos POST como "cadena" (tal vez usando jQuery:
$.post('foo.php',{data:st},function(data){... });
$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
.fuente
Debería ser así:
$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer }, function(response, status, xhr) { alert("POST returned: \n" + response + "\n\n"); })
fuente
Utilice la función JQuery Serialize
http://docs.jquery.com/Ajax/serialize
fuente
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; }
fuente
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';
fuente
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!
fuente