2010-11-05 5 views
4

J'ai un formulaire qui est sérialisé par JQuery et publié via .ajax() dans une URL.JQuery .ajax() succès toujours en cours (même lorsque le serveur renvoie le code d'erreur)

Le problème est que la fonction 'success:' est toujours appelée, que le serveur renvoie ou non un code d'erreur. En fait, le succès se déclenche avant même que le serveur ne réponde (j'ai mis un point d'arrêt sur la méthode serveur qui gère la requête - le succès se déclenche avant même que cette méthode ne soit terminée). Si le serveur renvoie un code d'erreur (par exemple, le code d'état 500), JQuery appelle à la fois les événements de réussite et d'erreur!

Des idées? Que se passe-t-il? Voici mon code jquery:

$("#a-dialog").dialog({ 
    autoOpen: false, 
    height: 300, 
    width: 400, 
    modal: true, 
    buttons: { 
    "Submit": function() { 
       $.ajax({ 
        type: 'POST', 
        url: theURL, 
        data: $("#a-dialog-form").serialize(), 
        success: alert('ok!') // THIS IS ALWAYS CALLED (IMMEDIATELY) 
       }); 
     }, 
    }, 
}); 

MISE À JOUR:

Ce fut une erreur stupide de ma part! Merci à blue112 pour pointer rapidement sur :)

Répondre

7

C'est normal, vous devez passer comme un rappel, par exemple

  $.ajax({ 
       type: 'POST', 
       url: theURL, 
       data: $("#a-dialog-form").serialize(), 
       success: function(){alert('ok!');} // The function will be called upon success. 
      }); 
+0

Doh! Bien sûr! Merci :) – UpTheCreek

+0

+1 - le code OPs attribue la valeur * return * de 'alert (" ok! ")' À la propriété 'success' –

1

Vous devez fournir le succès avec un pointeur vers une fonction, ou, couramment utilisés , en passant la définition de la fonction.

Ce que vous devez faire est d'avoir quelque chose comme ceci:

"Submit": function() { 
       $.ajax({ 
        type: 'POST', 
        url: theURL, 
        data: $("#a-dialog-form").serialize(), 
        success: function (data) { 
          alert('ok!') // THIS IS ALWAYS CALLED (IMMEDIATELY) 
        } 
       }); 
     }, 
    }, 

Qu'est-ce qui se passe dans votre cas est que l'alerte est appelé tout de suite si vous verrez le message d'alerte, même si la demande ajax n'a pas se faire virer du tout.

Questions connexes