Question

Comment utiliser le rappel beforeSend dans $. getJSON (interdomaine).

Plus précisément $. getJSON est un appel à un service YQL Comme

  

sélectionnez * à partir de HTML où   url = ” http://www.yahoo.com

Était-ce utile?

La solution

Le but de beforeSend est uniquement d'obtenir l'objet XHR brut (normalement pour définir des en-têtes HTTP dessus). Vous n'en avez pas besoin pour lancer les fileuses et autres. Ce code ici (de @petersendidit):

jQuery.ajax({
    url: url,
    dataType: "json",
    beforeSend: function(){
        $('.loading').show();
    }
});

Est-il préférable d'écrire comme ceci:

$('.loading').show();
jQuery.ajax({
    url: url,
    dataType: "json"
});

Autrement dit, à moins que vous n'ayez besoin d'options avancées dans jQuery.ajax, votre plan d'origine d'utilisation de jQuery.getJSON convient parfaitement. Donc, vous dites que vous voulez afficher un GIF de chargement, faites-le simplement et oubliez beforeSend .

jQuery(".someSpinnerImage").show();
jQuery.getJSON("http://www.somedomain.com/someurl", function(data) {
    jQuery(".someSpinnerImage").hide();
    // Do something with data
}

Autres conseils

$. getJSON n'est qu'une fonction de raccourci vers la fonction $ .ajax

get: function( url, data, callback, type ) {
   // shift arguments if data argument was ommited
   if ( jQuery.isFunction( data ) ) {
      callback = data;
      data = null;
   }
   return jQuery.ajax({
       type: "GET",
       url: url,
       data: data,
       success: callback,
       dataType: type
   });
}, 
getJSON: function( url, data, callback ) {
    return jQuery.get(url, data, callback, "json");
},

Donc, si vous avez besoin de faire autre chose, alors les appels getJSON de base utilisent simplement $ .ajax comme:

jQuery.ajax({
    url: url,
    dataType: "json",
    beforeSend: function(){
        $('.loading').show();
    }
});

L'autre option consiste à utiliser les $ .ajaxSend et $. ajaxComplete , mais ces fonctions seront appelées avant et après chaque appel ajax.

Je pense que vous souhaitez utiliser $ .ajaxStart () et $. ajaxStop () . Ceux-ci vous permettront d'afficher et de masquer un gif de chargement sur les requêtes ajax / JSON. Il fait également la bonne chose s'il y a plusieurs demandes ajax en cours.

Je pense que vous utilisez JSONP pour appeler un script depuis un autre serveur. J'ai fait mes devoirs et il n'y a pas d'événement beforeSend sur appel JSONP.

La méthode correcte consiste à utiliser le rappel beforeSend, car le rappel complet n'est pas appelé pour les requêtes mises en cache, car aucune demande n'est envoyée dans cette instance. Par conséquent, beforeSend n'est pas appelé non plus.

En d'autres termes, si vous affichez une image de chargement avant de créer votre requête $ .Ajax et que vous vous cachez pour la cacher au terme de cette requête, si la requête est mise en cache, votre image de chargement restera bloquée sur "show".

Il s’agit donc de la bonne méthode;

$.ajax({
url: url,
dataType: "json",
beforeSend: function() {
    $('.loading').show();
},
success: function(data) {
    // Do stuff...
},
complete: function() {
    $('.loading').hide();
}});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top