2009-11-28 15 views
8

Come utilizzare la richiamata beforeSend in $.getJSON (dominio incrociato).

Più specificamente $.getJSON è chiamata è a un servizio YQL Come

select * from HTML dove url =”http://www.yahoo.com

+0

Per fare cosa, esattamente? – tvanfosson

+0

Per mostrare una gif di caricamento ... –

+1

Perché non mostrare solo la gif di caricamento ... e quindi chiamare getJSON? – James

risposta

28

L'unico scopo di beforeSend è ottenere l'oggetto XHR non elaborato (normalmente per l'impostazione di intestazioni HTTP su di esso). Non ne hai bisogno per dare il via ai filatori e simili. Questo codice qui (da @petersendidit):

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

è meglio scritto così:

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

Il che significa che, a meno che non avete bisogno di opzioni avanzate in jQuery.ajax, il piano originale per usare jQuery. getJSON va bene. Quindi dici di voler mostrare una GIF di caricamento, fallo e dimenticati di beforeSend.

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

Penso che si desidera utilizzare $.ajaxStart() e $.ajaxStop(). Quelli 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.

5

$ GetJSON è solo una breve funzione di taglio alla 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ù allora il getJSON Basic chiama semplicemente usare $ .ajax come:

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

L'altra opzione è quella di utilizzare le funzioni $.ajaxSend e $.ajaxComplete ma questo farà sì che tali funzioni vengano chiamate prima e dopo ogni chiamata Ajax.

1

Penso che si stia utilizzando JSONP per chiamare uno script da un altro server. Ho fatto i compiti e non c'è nessun evento beforeSend sulla chiamata JSONP.

1

Il metodo corretto consiste nell'utilizzare il callback beforeSend, poiché il callback completo non viene richiamato nelle query memorizzate nella cache, in quanto una richiesta non viene inviata in questa istanza, quindi anche beforeSend non viene chiamato.

Un'altra parola, se si mostra un'immagine di caricamento prima di creare la richiesta $ .Ajax e si può contare per nasconderlo entro il completamento di tale richiesta, se la query è memorizzata nella cache, l'immagine di caricamento sarà 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(); 
}});