Domanda

Come posso usare prima di inviare callback in $ .getJSON (interdominio).

Più specificamente $ .getJSON è la chiamata a un servizio YQL Mi piace

  

seleziona * da html dove   url = " http://www.yahoo.com "

È stato utile?

Soluzione

L'unico scopo di beforeSend è ottenere l'oggetto XHR non elaborato (normalmente per impostare le intestazioni HTTP su di esso). Non ti serve per dare il via a spinner e simili. Questo codice qui (da @petersendidit):

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

È meglio scrivere così:

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

Il che significa che, a meno che tu non abbia bisogno di opzioni avanzate in jQuery.ajax, il tuo piano originale per usare jQuery.getJSON va bene. Quindi dici di voler mostrare una GIF in caricamento, basta farlo e dimenticare prima di inviare .

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

Altri suggerimenti

$ .getJSON è solo una funzione di scelta rapida per la funzione $ .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");
},

Quindi, se mai hai bisogno di fare qualcosa di più, le chiamate getJSON di base usano semplicemente $ .ajax come:

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

L'altra opzione è utilizzare $ .ajaxSend e $. ajaxComplete ma questo renderà tali funzioni chiamate prima e dopo ogni chiamata ajax.

Penso che tu voglia usare $ .ajaxStart () e $. ajaxStop () . Questi ti permetteranno di mostrare e nascondere una gif di caricamento su richieste Ajax / JSON. Fa anche la cosa giusta se ci sono più richieste Ajax in corso.

Penso che tu stia usando JSONP per chiamare uno script da un altro server. Ho fatto i compiti e non c'è nessun evento prima di inviare sulla chiamata JSONP.

Il metodo corretto consiste nell'utilizzare il callback beforeSend, poiché il callback completo non viene richiamato nelle query memorizzate nella cache, poiché in questa istanza non viene inviata una richiesta, pertanto neanche prima viene inviato Send.

Altre parole, se mostri un'immagine di caricamento prima di creare la tua richiesta $ .Ajax e fai affidamento su nasconderla al completamento di tale richiesta, se la query viene memorizzata nella cache, l'immagine di caricamento verrà bloccata su " mostra ".

Quindi questo è il metodo corretto;

$.ajax({
url: url,
dataType: "json",
beforeSend: function() {
    $('.loading').show();
},
success: function(data) {
    // Do stuff...
},
complete: function() {
    $('.loading').hide();
}});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top