Comment puis-je interrompre une transaction AJAX ?

Index

Avec la méthode "abort"

Exemple. Code JS :

var jqXHR = $.getJSON( "test.json" );
 
setTimeout( function(){
    // Si l'objet différé existe dans l'état "attendre", 
    // alors exécute la méthode fail()
 
    if ( jqXHR && jqXHR.state() === "pending" ){
        jqXHR.abort();
    }
}, 3000 ); // 3s
 
jqXHR.done( function( data, textStatus, jqXHR ){
    // succès de la transaction, on doit traiter le contenu de data
    console.log( data, textStatus, jqXHR );
 
});
 
jqXHR.fail( function( jqXHR, textStatus, errorThrown ){
    // échec de la transaction, gérer la catastrophe
    console.log( jqXHR, textStatus, errorThrown );
 
});
 
jqXHR.always( function( jqXHR, textStatus ){
    // la transaction est terminée
    console.log( jqXHR, textStatus );
});

Il y a une option "timeOut", mais elle ne fonctionne pas à 100% pour "script", "json" ou "jsonp".

Exemple. Code JS :
    
$.ajaxSetup( { "timeout" : 3000 } ); // 3s
 
var jqXHR = $.getJSON( "test.json" );
 
jqXHR.done( function( data, textStatus, jqXHR ){
    // succès de la transaction, on doit traiter le contenu de data
    console.log( data, textStatus, jqXHR );
 
});
 
jqXHR.fail( function( jqXHR, textStatus, errorThrown ){
    // échec de la transaction, gérer la catastrophe
    console.log( jqXHR, textStatus, errorThrown );
 
});
 
jqXHR.always( function( jqXHR, textStatus ){
    // la transaction est terminée
    console.log( jqXHR, textStatus );
});

Auteurs : danielhagnoul et darkterreur

Tests unitaires avec QUnit.