Jquery ajax appel à partir de javascript, PHP
Il semble y avoir un problème avec le code que j'ai pour l'appel de php en javascript avec jquery ajax. L'appel ajax semble réussir, mais je n'ai pas la bonne information renvoyée par la fonction php.
Dans la fonction php j'ai créer une requête SQL. J'ai envoyer la requête comme une reponse pour le déboguer avant d'effectuer une requête de suppression. Voici le code HTML pour la div pour afficher la requête.
<div id="thenode" style="position: absolute; top: 30px; left: 0px; width: 150px; background-color: white; z-index: 9999;"> </div>
Ici est l'ajax de jquery appel. Il y a deux variables étant envoyé à la fonction PHP: nodeid pour le nœud à supprimer, et option supprimer la fonction.
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);
}
});
}
Ici est la fonction 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;
}
?>
Devrait être simple, mais cet appel ajax retourne une chaîne vide et les causes de la div dans le code HTML de disparaître. C'est la première fois que j'utilise ajax dans un vrai projet. Le problème doit être facile à trouver pour quelqu'un qui sait ce qu'ajax n'a vraiment. Pouvez-vous dire que les problèmes?
- je me demande juste pourquoi vous devez obtenir le nœud sélectionné via un cookie. êtes-vous sûr que le cookie est écrit lorsque vous envoyez votre requête ajax? (si vous avez besoin d'avoir ce cookie, pourquoi vous ne lisez via php?)
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la réponse! Merci à vous tous qui avaient des suggestions à propos de l'appel SQL. Mais ici, c'est la réponse exacte à ma question.
Il y a quatre étapes dans la réalisation d'un Javascript ajax PHP à l'appel. Les deux premières étapes se produire dans le Javascript. Les deux autres étapes se produire dans le PHP.
L'étape 1. En Javascript décider quelles sont les variables nécessaires à la fonction PHP, récupérer leur.
L'étape 2. Faire de l'ajax appel à la fonction PHP. jquery est un moyen pratique de transmission de valeurs à PHP. Vous disposez d'un tableau de paires nom-valeur de ce genre dans l'élément de données pour l'appel ajax.
L'étape 3. Votre fonction PHP prêt dans un fichier PHP. Écrire la fonction comme ceci.
L'étape 4. L'écho d'un appel à la fonction php dans ce fichier PHP.
Avec ces quatre étapes, vous devriez réussir un appel à PHP, et être capable de renvoyer des informations à javascript de la fonction PHP.
Voici la fonction javascript.
Voici le fichier PHP uptree.PHP. Il a une fonction définie, appelée updatetree. Il a également écho à une déclaration d'appeler cette fonction. Cela semble juste être la façon de causer la fonction à exécuter. Ajax lui-même n'appelle pas la fonction.
Donc, pour résumer. Javascript obtient variables, fait appel ajax de fichier PHP. Ajax charges de fichier PHP qui contient echo instruction qui provoque fonction PHP à exécuter. Que PHP fonction est définie dans le même fichier. Le retour de la fonction instruction envoie les informations de retour pour le code javascript via ajax. Le Javascript n'quelque chose avec cette information, par exemple, de le charger dans un div sur la page HTML.
Vous avez réellement besoin pour exécuter la requête à vous de créer:
Alors le résultat contiendra une valeur Booléenne de l'état de réussite.
Également lorsque vous passez de nouveau à l'appel javascript vous devrez peut-être définir les en-tête de page de texte en clair ou json (si vous décidez d'utiliser json)
Je recommande fortement d'utiliser un outil comme Firebug pour regarder chaque requête ajax. Ensuite, vous pouvez voir les données publiées, les données de réponse, et les en-têtes pour vous aider à diagnostiquer votre problème. Actuellement, seul Firefox (autant que je sache) soutient pleinement l'extension firebug, mais firebug lite est également disponible pour les autres navigateurs.
Vous n'avez pas transmis
$sql
enmysql_query();
Votre code est vulnérable à l'injection SQL, comme il vérifie seulement pour un vide
$node
. En tant qu'utilisateur final, j'ai pu supprimer toutes les id dans la base de données que je souhaite, ou tous, si j'ai couru le code dans une boucle. Vous aurez besoin de quelque chose pour vérifier que l'utilisateur qui exécute le code a l'autorisation de supprimer le nœud, et aussi, appelezmysql_real_escape_string()
sur$node
.ADDITIF
Nous ne voyons pas le code où vous appelez
upTree()
en PHP. Êtes-vous fait appel de la fonction? Si vous ne l'appelez pas et c'est toute votre script PHP, puis il va exécuter, ne rien faire, et de retourner en blanc de la réponse HTTP à votre Ajax qui appelle la fonction avec succès un code de réponse de 200....
Je suppose que vous voulez la requête affichée à l'intérieur de votre div. Vous avez besoin d'echo($sql); echo(uptree()); ou l'équivalent quelque part dans votre programme. Vous pouvez également créer un formulaire HTML qui affiche les mêmes données que votre AJAX pour voir ce que PHP est de retour.