2010-05-19 13 views
0

Je veux soumettre le formulaire et montrer le message sur le résultat. update_records initialise alert_message au message d'erreur. En cas de succès, j'attends que sa valeur soit modifiée. Than update_records sort le message. Mais la fonction alerte toujours "Erreur lors de la soumission du formulaire". Quel est le problème avec cela?JQuery soumettre le formulaire et la réponse de sortie ou le message d'erreur

Le code suivant:

function update_records(form_name) { 
    var options = { 
     async: false, 
     alert_message: "Error submitting form", 
     success: function(message) { 
     this.alert_message = message; 
     } 
    }; 
    $('#' + form_name).ajaxSubmit(options); 
    alert(options.alert_message); 
    } 

Je suis novice en Javascript/JSon/Jquery et je pense que je comprends mal quelques notions de base de technologies mentionnées.

MISE À JOUR:

I spécifié "async:false" pour rendre l'exécution synchrone (est-il correct?)

J'ai aussi essayé d'insérer délai entre deux lignes suivantes:

$('#' + form_name).ajaxSubmit(options); 
pausecomp(1000); // inserted pause 
alert(options.alert_message); 

Il fait aussi ne pas résoudre le problème. Code pour pousecomp suit:

function pausecomp(millis) 
    { 
    var date = new Date(); 
    var curDate = null; 
    do { curDate = new Date(); } 
    while(curDate-date < millis); 
    } 

Répondre

0

L'appel AJAX de ajaxSubmit est asynchrone - cela signifie que la demande AJAX est fait hors de l'ordre d'exécution du programme habituel, et dans votre programme qui signifie que l'alerte est appelée avant this.alert_message = message; a une opportunité d'exécution. L'ordre d'exécution est:

  1. appel update_records()
  2. faire la demande ajaxSubmit AJAX, souvenez-vous d'exécuter la fonction de rappel, mais pas maintenant
  3. appellent le alert(options.alert_message)
  4. lorsque les données renvoie de demande de ajaxSubit, exécutez la fonction de rappel (qui consiste à définir la variable this.alert_message)

Pour que l'alerte affiche la valeur correcte, déplacez le code ut Ilise les données de retour AJAX (le alert()) à la fonction success() - ce à quoi sert la fonction de réussite.

+0

En fait, j'ai besoin de stocker des informations sur le succès après l'exécution de la fonction 'update_records()'. Et j'aimerais trouver le moyen de le faire. Dans l'exemple en question, ceci est en stockant le message. – sergtk

+0

ajoutez 'alert (message);' dans votre fonction de succès. Utilisez ces données pour noter les valeurs de données renvoyées à partir de votre formulaire côté serveur en cas de succès ou d'échec. Vérifiez la valeur de retour avec 'if' dans JQuery, et répondez avec un' alert() 'en conséquence. Ne pas oublier d'enlever le 'alerte (message);' debug :) – Andy

+0

Je viens de trouver une solution de contournement, j'ai changé de "this.alert_message = message;" aux "options".alert_message = message; "mais je le déteste! :) – sergtk

0
$('#' + form_name).ajaxSubmit(options); 

Comme l'acronyme AJAX suggère cet appel est asynchrone de sorte que votre alert(options.alert_message); est appelé avant le rappel de la réussite est thats pourquoi vous obtenez toujours une alerte avec le message d'erreur bien qu'un appel ajax peut compléter, vous pouvez avec succès essayer quelque chose comme ceci à la place:

function update_records(form_name) { 

    var options = { 
     async: false, 
     alert_message: "Error submitting form", 
     success: function(message) { 
     alert(message); 
     }, 
     error : function(){ 
     alert(this.alert_message); 
     } 
    }; 
    $('#' + form_name).ajaxSubmit(options); 

    } 
+0

J'ai spécifié que l'appel est synchrone (async: false) Ou j'ai raté quelque chose? – sergtk