Evénements de requête jQuery AJAX – terminé, échec, succès

J’ai un code comme ça

var ajaxrequest = $.ajax({ type: "POST", dataType: "json", url: "xy.php", data: { action : "read" } }).fail(function(){ //something to do when ajaxreq fails }).done(function(data){ //something to do when ajaxreq is done }); 

Cela fonctionne pas de problème. Ma question est pourquoi cela ne fonctionne pas:

 var ajaxrequest = $.ajax({ type: "POST", dataType: "json", url: "n3_vaje_api.php", //Relative or absolute path to response.php file data: { action : "read", }, fail:function(){ //something to do when ajaxreq fails }, done:function(data){ //something to do when ajaxreq is done } }); 

Fail et done ne sont que des exemples, mais ne fonctionnent pas non plus s’ils sont utilisés à l’intérieur. Mais l’utiliser à l’extérieur comme:

 ajaxrequest.complete(f(){}); 

fonctionne très bien … Je sais qu’au lieu de le faire, je devrais utiliser le succès, mais ce n’est pas ce que je veux dire ici. Quel est le problème ici?

vous devez utiliser le succès et l’erreur est la méthode que vous devez utiliser si vous souhaitez utiliser votre deuxième option

c’est un exemple de demande ajax sans promesse, où vous obtenez le succès et la fonction d’erreur en tant que paramètre

  $.ajax({url:"demo_test.txt" ,error : function (xhr,status,error) { //alert error} ,success:function(result){ $("#div1").html(result); }}); 

Lors de la première utilisation, vous utilisez le retour d’object promis par ajax requst, c’est la raison pour laquelle vous avez terminé et dont la méthode a échoué.

ceci est un exemple d’object de promesse, dans l’exemple ci-dessous, la demande est un object de promesse

 var request = $.ajax({ url: "script.php", type: "POST", data: { id : menuId }, dataType: "html" }); request.done(function( msg ) { $( "#log" ).html( msg ); }); request.fail(function( jqXHR, textStatus ) { alert( "Request failed: " + textStatus ); }); 

Avis de dépréciation: Les rappels jqXHR.success (), jqXHR.error () et jqXHR.complete () sont supprimés à partir de jQuery 3.0. Vous pouvez utiliser jqXHR.done (), jqXHR.fail () et jqXHR.always () à la place.

Vous pouvez simplement utiliser $ .post au lieu de $ .ajax et json comme quasortingème argument.

 $.post("n3_vaje_api.php", {action : "read"}, function(response) { // Do something with the request }, 'json') .done(function() { alert( "second success" ); }) .fail(function() { alert( "error" ); }) .always(function() { alert( "finished" ); });