2012-11-30 6 views
6

Ho riscontrato alcuni problemi con la funzione di errore ajax che viene richiamata mentre lo script impiega un po 'di tempo a caricarsi. Ma sono stato in grado di risolverlo aggiungendo async: false.

es:

$.ajax({ 
    type: 'POST', 
    url: REQUEST_URL, 
    async: false, 
    data: { 
     'id': id 
    }, 
    dataType: 'json', 
    success: function(output) { 
     // success 
    }, 
    error: function() { 
     alert('Error, please refresh the page'); 
    } 
}); 

Quando si leggono i documenti si dice:

Per impostazione predefinita, tutte le richieste vengono inviate in modo asincrono (vale a dire questo è impostato su true per impostazione predefinita). Se hai bisogno di richieste sincrone, imposta questa opzione su false. Richieste tra domini e dataType: le richieste "jsonp" non supportano l'operazione sincrona di supporto . Si noti che le richieste sincrone possono bloccare temporaneamente il browser, disabilitando tutte le azioni mentre è attiva la richiesta . A partire da jQuery 1.8, l'uso di async: false con jqXHR ($ .Deferred) è deprecato; è necessario utilizzare i callback completi/successi/errori .

Q) Cosa significa l'ultima parte su jqXHR ($ .Deferred)? Questo effetto ha il mio copione?

risposta

5

Non ha alcun effetto sul tuo script.

significa che, quando si eseguono richieste AJAX sincrone, non si dovrebbe usare il deferred API esposta dall'oggetto restituito da $.ajax() (come done() o fail() per esempio), ma si basano sulle complete e error gestori invece.

In altre parole, il codice utilizza già lo schema corretto. Dovresti modificarlo se ha usato operazioni differite come:

// Do not write this code. 
$.ajax({ 
    type: 'POST', 
    url: REQUEST_URL, 
    async: false,   // <-- Synchronous request. 
    data: { 
     'id': id 
    }, 
    dataType: 'json' 
}).done(function(output) { // <-- Use of deferred method. 
    // success 
}).fail(function() {  // <-- There also. 
    alert('Error, please refresh the page'); 
}); 
+0

grazie, volevo solo assicurarmi che il mio codice non si rompesse in futuro jquery –