jQuery ha deprecato XMLHTTPRequest sincrono

Come molti altri, il mio sito Web utilizza jQuery. Quando apro gli strumenti per sviluppatori, vedo un avviso che dice che XMLHTTPRequest è

deprecato a causa dei suoi effetti negativi sull’esperienza dell’utente finale.

Sono andato avanti e ho letto parte della documentazione , ma era abbastanza tecnico. Qualcuno può spiegare le conseguenze del passaggio da XMLHTTPRequest a WHATWG in termini semplici? Dice che è successo nel 2012.

Inoltre, la documentazione dice che Synchronous XMLHttpRequest al di fuori dei lavoratori è in fase di rimozione dalla piattaforma web, quando ciò accade, se un agente utente li ha in un servizio, hanno bisogno di modificare il loro codice esistente?

Per evitare questo avviso, non utilizzare:

async: false 

in una qualsiasi delle tue $.ajax() . Questa è l’unica caratteristica di XMLHttpRequest che è deprecata.

Il valore predefinito è async: true , quindi se non utilizzi mai questa opzione, il tuo codice dovrebbe essere sicuro se la funzionalità viene mai rimossa (probabilmente non lo sarà), potrebbe essere rimossa dagli standard, ma io i browser di scommessa continueranno a supportarlo per molti anni).

La risposta accettata è corretta, ma ho trovato un’altra causa se si sta sviluppando in ASP.NET con Visual Studio 2013 o versioni successive e si è sicuri di non aver fatto richieste Ajax sincrone o di definire script nel posto sbagliato.

La soluzione è disabilitare la funzione “Browser Link” deselezionando “Enable Browser Link” nel menu a discesa della barra degli strumenti VS indicato dalla piccola icona di aggiornamento che punta in senso orario. Non appena lo fai e ricarica la pagina, gli avvertimenti dovrebbero smettere!

Disabilita il collegamento del browser

Questo dovrebbe accadere solo durante il debug localmente, ma è comunque bello conoscere la causa degli avvertimenti.

Questo mi è successo avendo un collegamento a js esterni fuori dalla testa poco prima della fine della sezione del corpo. Sai, uno di questi:

Non aveva nulla a che fare con JQuery.

Probabilmente vedresti lo stesso fare qualcosa del genere:

 var script = $(""); script.attr("src", basepath + "someotherfile.js"); $(document.body).append(script); 

Ma non ho provato questa idea.

Nessuna delle risposte precedenti (che sono tutte corrette) era adatta alla mia situazione: non uso il parametro async in jQuery.ajax() e non includo un tag script come parte del contenuto che è stato restituito piace:

 
SOME CONTENT HERE

La mia situazione è che sto chiamando due richieste AJAX consecutive con l’objective di aggiornare due div allo stesso tempo:

 function f1() { $.ajax(...); // XMLHTTP request to url_1 and append result to div_1 } function f2() { $.ajax(...); // XMLHTTP request to url_2 and append result to div_2 } function anchor_f1(){ $('a.anchor1').click(function(){ f1(); }) } function anchor_f2(){ $('a.anchor2').click(function(){ f2(); }); } // the listener of anchor 3 the source of problem function anchor_problem(){ $('a.anchor3').click(function(){ f1(); f2(); }); } anchor_f1(); anchor_f2(); anchor_problem(); 

Quando clicco su a.anchor3 , solleva il flag di avviso. Ho risolto il problema sostituendo f2 invocando tramite la funzione click() :

 function anchor_problem(){ $('a.anchor_problem').click(function(){ f1(); $('a.anchor_f2').click(); }); } 

Il mio workabout: utilizzo le richieste asincrone scaricando il codice su un buffer. Ho un ciclo che controlla il buffer ogni secondo. Quando il dump è arrivato al buffer, eseguo il codice. Uso anche un timeout. Per l’utente finale la pagina funziona come se si utilizzassero richieste sincrone.