2016-06-09 15 views
0

Ich habe einige Javascript, die ich bedingt ausführen muss - es ist nicht in einem requirejs Formular. Auch besteht das Skript innerhalb der gleichen Servers/Domäne wie die anfordernden Seite (die den Ajax-Aufruf unten enthält)Warten Sie, bis ein Skript heruntergeladen und ausgeführt wurde und warten Sie, bis DOM geladen wird

Gibt es eine endgültige Art und Weise zu warten, bis eine Ajax-GET-Anfrage an eine Javascript-Datei heruntergeladen wird und ausgeführt (alle vervollständigen) und sicherstellen, dass das DOM vollständig geladen ist. Auch die Ausnahmebehandlung, die berücksichtigt wird, wenn der Download und/oder das Javascript fehlschlägt.

Ich habe viele Seiten mit ganz verschiedenen Lösungen gesehen mit (sync/async, wenn/done/defered [http://www.bennadel.com/blog/2124-using-deferred-objects-as-an-asynchronous-script-loader-in-jquery-1-5.htm], labjs, etc) - aber warten diese wirklich, bis der JavaScript-Code die Ausführung abgeschlossen hat?

Das Folgende ist, was ich habe, aber ich bin mir nicht sicher von der 'eval' Lösung und es überprüft nicht, ob das DOM vollständig geladen ist (beachten Sie, dass ich den Datentyp als 'Text' so markiert habe dass es nicht automatisch ausgeführt werden, wie dies durch die eval gepflegt wird)

var myScriptFileRequest = $.ajax({ 
    url: '...myScriptFile.js', 
    dataType: "text", 
    cache: false, 
    async: true 
}); 
myScriptFileRequest.fail(function (jqXHR, textStatus) { 
    document.getElementById(divId).innerHTML = "Error on if get:" + jqXHR.status + ":" + jqXHR.statusText + ":" + textStatus; 
}); 
myScriptFileRequest.done(function (msg) { 
    eval(myScriptFileRequest.responseText); 
    //... 
} 

Antwort

0

ziemlich einfach erreicht werden kann durch den abhängigen Code innerhalb der ‚done‘ Veranstaltung platzieren (ich dachte, dass es ein Ereignis sein kann, das erreicht werden, die gleiche Sache)

Verwandte Themen