JavaScript console.log προκαλεί σφάλμα: "Synchronous XMLHttpRequest on the main thread is deprecated...&quot,

Έχω προσθέσει αρχεία καταγραφής στην κονσόλα για να ελέγξω την κατάσταση διαφόρων μεταβλητών χωρίς να χρησιμοποιήσω τον αποσφαλματωτή του Firefox.

Ωστόσο, σε πολλά σημεία στα οποία προσθέτω ένα console.log στο αρχείο μου main.js, λαμβάνω το ακόλουθο σφάλμα αντί για τα υπέροχα μικρά χειρόγραφα μηνύματα προς τον εαυτό μου:

Synchronous XMLHttpRequest on the main thread is deprecated because of its detriminal effects to the end user's experience. Για περισσότερη βοήθεια http://xhr.spec.whatwg.org/

Ποιες εναλλακτικές λύσεις ή περιτυλίγματα για το console.log μπορώ να προσθέσω στη χρήση του κώδικά μου που δεν θα προκαλέσουν αυτό το σφάλμα;

Μήπως το κάνω λάθος;

Αυτό μου συνέβη όταν ήμουν τεμπέλης και συμπεριέλαβα μια ετικέτα δέσμης ενεργειών ως μέρος του περιεχομένου που επιστρέφεται. Ως εκ τούτου:

Μερικό περιεχόμενο HTML:

<div> 
 SOME CONTENT HERE
</div>
<script src="/scripts/script.js"></script> 

Φαίνεται, τουλάχιστον στην περίπτωσή μου, ότι αν επιστρέψετε περιεχόμενο HTML όπως αυτό μέσω xhr, θα προκαλέσετε την κλήση του jQuery να κάνει μια κλήση για να πάρει αυτό το σενάριο. Αυτή η κλήση συμβαίνει με σημαία async false, αφού υποθέτει ότι χρειάζεστε το σενάριο για να συνεχίσετε να το φορτώνετε.

Σε περιπτώσεις όπως αυτή, θα ήταν καλύτερα να εξετάσετε ένα πλαίσιο δέσμευσης κάποιου είδους και απλά να επιστρέψετε ένα αντικείμενο JSON, ή ανάλογα με το backend και το templating σας θα μπορούσατε να αλλάξετε τον τρόπο με τον οποίο φορτώνετε τα σενάριά σας.

Θα μπορούσατε επίσης να χρησιμοποιήσετε το jQuery's getScript() για να αρπάξετε τα σχετικά σενάρια. Εδώ είναι ένα fiddle, Είναι απλά ένα απλό αντίγραφο του παραδείγματος jQuery, αλλά δεν βλέπω καμία προειδοποίηση που πετάγεται όταν φορτώνονται τα σενάρια με αυτόν τον τρόπο.

Παράδειγμα

<script>
var url = "/scripts/script.js";
$.getScript(url);
</script>

[http://jsfiddle.net/49tkL0qd/][1]

Σχόλια (11)

Το προειδοποιητικό μήνυμα ΜΠΟΡΕΙ να οφείλεται σε μια αίτηση XMLHttpRequest εντός του κύριου νήματος με τη σημαία ασύγχρονης εκτέλεσης να έχει οριστεί σε false.

https://xhr.spec.whatwg.org/#synchronous-flag:

Σύγχρονο XMLHttpRequest εκτός των εργατών βρίσκεται στη διαδικασία της να αφαιρεθεί από την πλατφόρμα ιστού, καθώς έχει επιζήμιες επιπτώσεις στην την εμπειρία του τελικού χρήστη. (Πρόκειται για μια μακρά διαδικασία που απαιτεί πολλές χρόνια). Οι προγραμματιστές δεν πρέπει να περνούν false για το async όρισμα όταν η παγκόσμιο περιβάλλον της JavaScript είναι ένα περιβάλλον εγγράφου. Πράκτορες χρηστών ενθαρρύνονται έντονα να προειδοποιούν για μια τέτοια χρήση στα εργαλεία ανάπτυξης και μπορούν να πειραματιστούν με την απόρριψη μιας εξαίρεσης InvalidAccessError όταν συμβαίνει.

Η μελλοντική κατεύθυνση είναι να επιτρέπονται XMLHttpRequests μόνο σε νήματα εργασίας. Το μήνυμα προορίζεται ως προειδοποίηση προς αυτή την κατεύθυνση.

Σχόλια (3)

Αντιμετώπισα επίσης το ίδιο πρόβλημα, αλλά μπόρεσα να το διορθώσω βάζοντας async: true. Ξέρω ότι είναι από προεπιλογή true, αλλά λειτουργεί όταν το γράφω ρητά

$.ajax({
   async: true,   // this will solve the problem
   type: "POST",
   url: "/Page/Method",
   contentType: "application/json",
   data: JSON.stringify({ ParameterName: paramValue }),
});
Σχόλια (3)