Llamada jquery ajax desde javascript a PHP
Parece haber un problema con el código que tengo para llamar a php desde javascript con jquery ajax. La llamada ajax parece tener éxito pero no obtengo la información correcta de la función php.
En la función php creo una consulta SQL. Devuelvo la consulta como respuesta para depurarla antes de realizar una consulta de eliminación. Aquí está el HTML del div para mostrar la consulta.
<div id="thenode" style="position: absolute; top: 30px; left: 0px; width: 150px; background-color: white; z-index: 9999;"> </div>
Aquí está la llamada jquery ajax. Se envían dos variables a la función PHP: nodeid para el nodo que se va a eliminar y opción eliminar para la función.
function deleteitem()
{
//get selected node
var selectnod = getCookie('pnodid');
//define php info and make ajax call
$.ajax({
url: "uptree.php",
type: "POST",
data: { node: selectnod, option: "delete" },
cache: false,
success: function (response) {
$('#thenode').html(response);
}
});
}
Aquí está la función PHP.
<?php
function uptree() {
$node = $_POST['node'];
$option = $_POST['option'];
if($node == '' || $option == '') {
return '';
}
$dbco = mysql_connect('localhost', 'root', 'mmowebdb');
if (!$dbco)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("pagelinks", $dbco);
$sql = "DELETE FROM dtree_table WHERE nid='$node'";
return $sql;
}
?>
Debería ser sencillo, pero esta llamada ajax devuelve una cadena vacía y hace que desaparezca el div en el HTML. Esta es la primera vez que uso ajax en un proyecto real. El problema debe ser fácil de encontrar para alguien que sepa lo que realmente hace ajax. ¿Puedes decir los problemas?
¡Encontré la respuesta! Gracias a todos los que tuvieron sugerencias sobre la llamada SQL. Pero aquí está la respuesta real a mi pregunta.
Hay cuatro pasos para realizar una llamada de Javascript ajax a PHP. Los primeros dos pasos ocurren en Javascript. Los otros dos pasos ocurren en PHP.
Paso 1. En Javascript, decida qué variables se necesitan en la función PHP y recupérelas.
Paso 2. Realice la llamada ajax a la función PHP. jquery tiene una forma conveniente de pasar valores a PHP. Tiene una matriz de pares nombre-valor como este en el elemento de datos para la llamada ajax.
data: { node: selectnod, option: "delete" },
Paso 3. Tenga lista su función PHP en un archivo PHP. Escribe la función así.
function updatetree($node, $option) {
Paso 4. Haga eco de una llamada a la función php dentro de ese archivo PHP.
Con estos cuatro pasos deberías tener una llamada exitosa a PHP y poder devolver información a javascript desde la función PHP.
Aquí está la función de JavaScript.
function deleteitem()
{
//Get selected node to send to PHP function
var selectnod = getCookie('pnodid');
//Define php info, specify name of PHP file NOT PHP function
//Note that by loading the PHP file you will probably execute any code in that file
//that does not require a function call
//Send PHP variables in the data item, and make ajax call
//On success perform any action that you want, such as load a div here called thenode
$.ajax({
url: "uptree.php",
type: "POST",
data: { node: selectnod, option: "delete" },
cache: false,
success: function (response) {
$('#thenode').html(response);
}
});
}
Aquí está el archivo PHP uptree.PHP . Tiene una función definida, llamada updatetree . También tiene una declaración de eco para llamar a esa función. Esta parece ser la forma de hacer que se ejecute la función. Ajax en sí no llama a la función.
<?php
//Function defined here
//The variables will come from the ajax data statement
function updatetree($node, $option) {
if($node == '' || $option == '') {
return 'Select an item in the tree.';
}
$dbco = mysql_connect('localhost', 'root', 'mmowebdb');
if (!$dbco)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("pagelinks", $dbco);
$sql = '';
switch($option) {
case 'delete':
$sql = "DELETE FROM dtree_table WHERE nid='$node'";
break;
case 'add':
list($pagename, $address) = explode(",", $page);
$pagename = trim($pagename);
$address = trim($address);
$sql = "INSERT INTO dtree_table (nid, pid, name, url) values (NULL, ".$node.", '".$pagename."', '".$address."')";
break;
case 'update':
break;
}
if (!empty($sql)) return $sql;
}
//echo statement to run function, variables sent by ajax are retrieved with $_REQUEST
//they could have also been retrieved with $_GET or $_POST
echo updatetree(trim($_REQUEST['node']),trim($_REQUEST['option']),trim($_REQUEST['page']));
?>
Entonces, para recapitular. Javascript obtiene variables, realiza una llamada ajax al archivo PHP. Ajax carga un archivo PHP que contiene una declaración de eco que hace que se ejecute la función PHP. Esa función PHP está definida en ese mismo archivo. La declaración de retorno de la función envía información a javascript a través de ajax. Javascript hace algo con esa información, por ejemplo, cargarla en un div en la página HTML.