2008-12-17 7 views
3

Je construis l'application JQuery/JS/PHP/mySQL avec la gestion d'enregistrements de DB et ai besoin de fournir la rétroaction complète & à l'utilisateur sur des appels d'AJAX, en modifiant les enregistrements de DB d'extrémité arrière. Le problème IMHO est $.ajaxsuccess: et error: fonctions indiquent juste le succès de la couche de transport AJAX et pas tout le processus. Que faire si la modification de DB échoue? Comment peut-on fournir la rétroaction complète à l'utilisateur?Rétroaction complète d'AJAX

J'ai fini avec

 
$.ajax({ 
    url: "/action/delete", 
    data: "rowid="+rowid, 
    complete: function(xmlHttp) { 
    if (xmlHttp.responseText) alert('Success - back end returned "success"'); 
     else alert('failure - back end returned NULL') 
    } 
}); 

et la réponse PHP:

 
$success = deleteRecord($_GET(rowid)); 

if($success) { 
    print 'success'; 
} else { 
    print NULL; 
} 
exit(); 

L'idée est simple - si je parviens à obtenir une rétroaction positive de l'arrière, l'ensemble de l'opération a réussi, si pas - l'utilisateur ne se soucie pas du problème.

Merci d'avance, vos commentaires sont grandement appréciés.

Répondre

3

Si vous répondez à la demande avec certaines données json au lieu de simplement ajouter du code html dans le DOM, vous pouvez placer les types de codes d'erreur et les messages que vous aimez avec les données. Par exemple, si votre réponse était quelque chose comme ...

{ 
    errorstate: 0, 
    errormsg: "All systems are go", 
    displaytext: "stuff I want to display when all goes well" 
} 

Votre code javascript peut examiner ces données et faire ce qu'il estime qu'il a besoin. Il vous permet également de pousser plus de la gestion des erreurs dans votre script serveur, ce qui peut souvent être plus simple.

Essayez http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback

+0

ne devriez-vous pas avoir des accolades autour de cela plutôt que des crochets? –

+0

oups, oui, mais vous avez l'idée. –

+0

Merci, Rikh - ça ressemble à une bonne solution. Intéressant cependant pourquoi AJAX ne fournit pas de fonction de retour. –

2

Une solution possible serait d'utiliser le code de réponse HTTP pour signaler un échec, comme 200 OK, tout est ok, et 500 Internal Server Error en cas d'erreur, que vous pouvez simplement vérifier lorsque vous atteignez l'état 4.

En PHP, je crois que cela est fait par l'en-tête ("HTTP/1.0 200 Ok") avant que d'autres données sont envoyées. Si vous avez peur que les données soient envoyées par erreur avant que vous puissiez évaluer l'en-tête correct à définir, vous pouvez activer la mise en mémoire tampon de sortie. Comment vous souhaitez présenter les données est bien sûr à vous, vous pourriez par exemple sur 500 juste document.getElementById ("myerrorbox"). InnerHTML = xmlHttp.responseText, ou similaire, et rendre un html- partiel document dans votre programme PHP.

0

Je renvoie des messages d'état au client. Avec le drapeau d'erreur. Et puis mon code JavaScript affiche le message qu'il a reçu du serveur et colore le message en fonction de l'indicateur d'erreur. Je trouve cela très efficace.

Questions connexes