In meinem Anwendungsfall verwende ich sowohl externe als auch Inline-Javascript-Inhalte. Ich habe folgende Struktur.Wie verzögere ich die Inline-Javascript-Ladezeit?
app/
header.html
home.html
config-load.js
footer.html
home.html
umfasst header.html
und footer.html
. header.html
Datei enthält config-load.js
.
config-load.js
macht einen Ajax-Aufruf, um die Konfigurationen auf der Bühne von Golang Backend zu erhalten. Dies kann einige Millisekunden Verzögerung haben.
Es gibt einige Inline-Skripte in home.html
, die die von config-load.js
gesammelten Ajax-Aufrufe verwenden.
So config-load.js
Ajax Aufruf muss abgeschlossen sein, bevor Inline-Skripte geladen werden. Aber es lädt in die andere Richtung.
ich versuchte, eine while-Schleife zu verwenden, wie unten die Ladezeit für die Inline-Skripte zu verzögern,
while(configReceived == false)
{
setTimeout(function(){
console.log("waiting for config");
}, 2000);
}
if(configReceived)
{
//process configs
}
Aber Dies blockiert den Faden. Die Seite bleibt in der while-Schleife hängen. Gibt es einen anderen Weg, dies zu erreichen?
EDIT 1: Hier ist der Inline-Skriptinhalt,
<script type="text/javascript">
window.onload = function() {
time = new Date($.now());
var tagsArray = ["C", "C++", "Go", "Ruby"];
//var tagsArray = [];
requestJSON = '{"Method":"GET","AppName":"Web-app","ServiceURL":"'+endpoints.Tags.HTTPEndpoint.URL+'","Properties":null,"Object":"","Timestamp":"'+time+'"}'
$.ajax({
type: "GET",
url: endpoints.Tags.HTTPEndpoint.URL,
data: requestJSON,
processData: false,
contentType: "application/json;",
dataType: "json",
async: false,
success: function(data){
console.log("tags retrieved successfully info updated successfully")
console.log("Tags ", data.Object)
tagsArray = data.Object
},
failure: function(errMsg) {
console.log("Error occured in getting tags ", errMsg)
}
});
$("#myTags").tagit();
$("#tags").tagit({
fieldName: "tagsName", // The name of the hidden input field
availableTags: tagsArray,
allowSpaces:true,
caseSensitive:false,
removeConfirmation:true,
placeholderText:"Tags",
tagLimit: 5,
allowDuplicates: false,
singleField: true, // Use a hidden input element with the fieldName name
singleFieldDelimiter: ',', // Optional, default value is same.
onlyAvailableTags: false
});
}
</script>
Und mein config-load.js wie unten aussieht,
//////////////////////////////////////////////////////////
// code block to get the service endpoints by stage starts
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
endpoints = JSON.parse(xhr.responseText);
console.log("server endpoints be ", endpoints);
configReceived = true;
}
}
xhr.open("GET", "/config", true);
try {
xhr.send();
} catch (err) {
// handle error
console.log("Error occured in getting the service endpoints. This may break all ajax services");
}
// code block to get the service endpoints by stage ends
////////////////////////////////////////////////////////
Ich versuche, für die letzten 3 Tage, aber kein Glück.
Versuchen Sie 'config-load.js' und' anotherscript.js' in Ihre 'footer.html' –