2010-06-29 4 views
0

J'utilise jquery et php pour certains travaux asynchrones. J'utilise $.ajax avec beforesend, complete, success et error. J'ai fait la requête async POST à ​​un php qui exécute une requête mysql et renvoie true (chaîne "1" en fait) si tout est ok et false (string "0"). Retour à js J'ai effectué le retour de données dans la fonction de réussite (ou terminé?). Dois-je avoir à manipuler des données avec

if (data=="1") 
    alert("ok") 
else 
    alert("ko")? 

Est-ce la bonne façon?

Une autre question, la fonction d'erreur de $ .ajax est pour la requête ajax elle-même nad pas pour le résultat de l'opération? Merci


peut-être que je ne l'ai pas expliquer moi-même très bien. Le script ph fait seulement quelques requêtes mais il y a une possibilité que la requête ne s'exécute pas pour une raison quelconque, donc je teste l'exécution de la requête et retourne immédiatement "0" ou à la fin après que toute requête soit correctement exécutée, "1" . En javascirpt si j'ai "0" je dois afficher une erreur avec alerte, si "1" un message de succès.

Donc, dans js j'ai seulement besoin de tester les données retournées et afficher l'alerte dans la fonction de succès de $ .ajax?

+0

Il n'y a aucune raison que cela soit étiqueté comme PHP. –

Répondre

2

Pour ce genre de situation que je préfère utiliser un objet que je retourne comme JSON il est un peu plus souple:

$resultObj = new stdClass(); 
$resultObj->success = true; 
$resultObj->msg = ''; 

//your code here 
//in case of SQL error 
$resultObj->success = false; 
$resultObj->msg = 'There was an error while processing your requests'; 

//return the response 
$echo json_encode($resultObj); 

Et puis dans votre demande jQuery vous pouvez définir la propriété dataType à JSON afin que transformera la réponse en un objet en cas de succès HTTP afin que vous puissiez gérer l'erreur dans la fonction succès:

$.ajax({ 
url  : 'yourpage.php', 
success : function(data, status, xhr) { 
    if (data.success === true) { 
     alert('Everything ok'); 
    } else { 
     alert('An error occurred: ' + data.msg); 
    } 
}, 
error : function(xhr, status, ex) { 
    alert('An error occurred during the communication with the server: ' + xhr.status +' - ' + xhr.statusText); 
}, 
dataType : 'json' 
}); 

Comme d'autres ont dit que vous pouvez avoir votre script PHP renvoie une erreur HTTP 404 de sorte qu'au lieu de votre erreur est redirigé vers le gestionnaire d'erreur javascript, mais j'aime k eep ce gestionnaire d'erreurs pour les erreurs non gérées comme une exception non interceptée ou un échec HTTP, et pour les erreurs que j'ai traitées sur le côté serveur, je les gère également sur le côté client à l'intérieur de la fonction de succès.

Espérons que cela aide.

0

Cela fonctionne! Si vous voulez appeler votre fonction d'erreur vous devez configurer vous êtes serveur pour répondre avec un code d'erreur, à savoir:

<?php header('HTTP/1.1 404 Not Found'); ?> 
+0

C'est terrible; Une erreur interne du serveur 500 indique que le script s'est écrasé, ce qui n'a pas été le cas. –

+0

vous avez raison mauvais exemple. Je l'ai changé – jigfox

0

La fonction transmise en tant que paramètre error de la fonction $.ajax() ne sera exécutée que si la requête échoue; c'est à dire. si elle renvoie un code d'erreur comme 404 Not Found ou 500 Internal Server Error.

En ce qui concerne JavaScript, la requête aboutit, qu'elle contienne "false", "error" ou toute autre chaîne. Vous devrez le vérifier dans la fonction que vous avez transmise en tant que paramètre success, comme vous l'avez démontré ci-dessus.

Vous pouvez envisager de renvoyer un code d'erreur HTTP (comme 403 Forbidden ou any other status code that makes more sense to your script) au lieu de 0 si le script PHP renvoie la valeur false.