2010-04-06 4 views
4

J'ai un tas d'appels ajax qui contiennent des conditions de réussite et d'erreur comme celui-ci:

$.ajax({ 
     url: 'Remote/State.cfc' 
     ,type: "POST" 
     ,data: { 
      'method': 'UpdateStateName' 
      ,'StateID': StateID 
      ,'StateName': StateName 
     } 
     ,success: function(result){ 
      if (isNaN(result)) { 
       $('#msg').text(result).addClass('err'); 
      } else { 
       $('#' + result + ' input[name="StateName"]').addClass('changed'); 
      }; 
     } 
     ,error: function(msg){ 
      $('#msg').text('Connection error').addClass('err'); 
     } 
    }); 

Toutes les conditions d'erreur sont les mêmes. En d'autres termes, ils mettent tous l'expression "erreur de connexion" dans l'ID de msg.

Q1: Puis-je supprimer tous ces éléments et les remplacer par

$().ajaxError(function(myEvent, request, settings, thrownError) { 
    $('#msg').text('Connection error').addClass('err'); 
}); 

Q2: Comment utiliseriez-vous myEvent et demande d'afficher un message d'erreur plus informatif?

Répondre

6

Q1. Vous pouvez utiliser .ajaxError() comme ceci:

$(document).ajaxError(function() { 
    $('#msg').text('Connection error').addClass('err'); 
}); 

... ou si l'élément #msg est présent tout le temps, vous pouvez le faire:

$('#msg').ajaxError(function() { 
    $(this).text('Connection error').addClass('err'); 
}); 

Q2. Vous pouvez utiliser les arguments de gestionnaire qui ajaxError passe, il utilise ce format: handler(event, XMLHttpRequest, ajaxOptions, thrownError), quelque chose comme ceci:

$(document).ajaxError(function(event, request, options, error) { 
    $('#msg').addClass('err') 
    .text('Connection error: ' + error + ' when connecting to ' + options.url); 
}); 

Note: dans les versions précédentes de jQuery cela serait fait par $.ajaxError(), puisque 1,7 c'est pas plus le cas, vous devrez l'attacher à un objet jQuery sur lequel vous le voulez, ou document si vous ne vous souciez pas d'un élément particulier.

+0

$ .ajaxError est "introuvable" dans jQuery 1.7.1. $ (document) .ajaxError fonctionne bien ... –

+0

$ .ajaxError (function() ne fonctionne pas, comme indiqué. Doit être attaché à l'élément, comme "document" –

+0

@Aleja_Vigo - en effet, c'est un changement de rupture dans jQuery longtemps après cette réponse a été posté :) –