Estoy tratando de enviar una matriz desde un archivo JS a un archivo PHP en el servidor, pero cuando intento usar la matriz en php, no obtuve nada.
Esta es mi función en JS:
var sortOrder = []; var request = function() { var jsonString = JSON.stringify(sortOrder); $.ajax({ type: "POST", url: '<?php echo get_template_directory_uri(); ?>/MYPAGE.php', data: { sort_order : jsonString }, cache: false, success: function() { alert('data sent'); } }) };y este es mi archivo php MYPAGE.php:
<?php $arrayJobs = json_decode(stripslashes($_POST['sort_order'])); echo($arrayJobs);?>Esta es la primera vez que uso ajax y, sinceramente, también estoy confundido con la URL porque estoy trabajando en una plantilla en wordpress. ¡Incluso si no uso json, no funciona!
Estos son los ejemplos que estoy viendo:
Enviar matriz con Ajax a script PHP
Pasar una matriz de JavaScript a PHP a través de jQuery $ .ajax
Primero, ¿dónde está ese código javascript? Debe estar en un archivo .php para que se ejecute el código php (función de wordpress).
En segundo lugar, ¿cómo sabe que no se reciben datos en el back-end? Está enviando una solicitud AJAX y no recibe el resultado aquí. Si lee la documentación en $.ajax , verá que la respuesta del servidor se pasa a la devolución de llamada success .
$.ajax({ type: "POST", url: '<?php echo get_template_directory_uri(); ?>/MYPAGE.php', data: { sort_order : jsonString }, cache: false, success: function(responseData) { // consider using console.log for these kind of things. alert("Data recived: " + responseData); } }) Verá todo lo que haga echo del código PHP en esta alerta. Solo entonces puedes decir si no recibiste nada.
Además, json_decode devolverá un objeto JSON (o una matriz si se lo indica). No puedes echo como lo has hecho aquí. En su lugar, debe usar print_r para esto.
$request = json_decode($_POST['sort_order']); print_r($request); Y creo que sort_order en el código javascript está vacío solo para este ejemplo y en realidad estás enviando algo en tu código real, ¿verdad?
el problema está en su url, javascript no puede interpretar las etiquetas de php, lo que le sugiero es pasar el "get_template_directory_uri()" como una variable de la página principal así:
<script> var get_template_directory_uri = "<?php get_template_directory_uri() ?>"; </script>y después, use esta variable en la propiedad url.
Buena suerte.
Espero que ayude