2012-11-30 2 views
6

J'ai eu quelques problèmes avec la fonction d'erreur AJAX se appelé pendant que le script prend du temps à charger. Mais j'ai été en mesure de le réparer en ajoutant async: false.

par exemple:

$.ajax({ 
    type: 'POST', 
    url: REQUEST_URL, 
    async: false, 
    data: { 
     'id': id 
    }, 
    dataType: 'json', 
    success: function(output) { 
     // success 
    }, 
    error: function() { 
     alert('Error, please refresh the page'); 
    } 
}); 

En lisant la documentation, il est dit:

Par défaut, toutes les demandes sont envoyées de manière asynchrone (à savoir ce paramètre est réglé true par défaut). Si vous avez besoin de requêtes synchrones, définissez cette option sur false. Les demandes interdomaines et dataType: les requêtes "jsonp" ne prennent pas en charge l'opération synchrone. Notez que les demandes synchrones peuvent bloquer temporairement le navigateur, en désactivant toutes les actions pendant que la demande est active. À partir de jQuery 1.8, l'utilisation de async: false avec jqXHR ($ .Deferred) est obsolète; vous devez utiliser les rappels complets/succès/erreur .

Q) Qu'est-ce que la dernière partie signifie à propos jqXHR (.Deferred $)? Cela affecte-t-il mon script?

Répondre

5

Cela n'affecte pas votre script.

Cela signifie que, lors de l'exécution des requêtes AJAX synchrones, on ne doit pas utiliser l'API deferred exposée par l'objet retourné par $.ajax() (comme done() ou fail() par exemple), mais compter sur les gestionnaires au lieu complete et error. En d'autres termes, votre code utilise déjà le bon modèle. Vous auriez à le modifier s'il utilisait des opérations différées comme:

// Do not write this code. 
$.ajax({ 
    type: 'POST', 
    url: REQUEST_URL, 
    async: false,   // <-- Synchronous request. 
    data: { 
     'id': id 
    }, 
    dataType: 'json' 
}).done(function(output) { // <-- Use of deferred method. 
    // success 
}).fail(function() {  // <-- There also. 
    alert('Error, please refresh the page'); 
}); 
+0

merci, je voulais juste m'assurer que mon code ne se casserait pas dans le futur jquery –

Questions connexes