jQuery $ .getScript - vecchie funzioni e le variabili in eseguire lo script
Domanda
eseguo un javascript con jQuery $ .getScript. Nello script eseguito non ho accesso alle funzioni e le variabili del mio file di origine.
C'è una soluzione?
Soluzione
Lo script eseguito da $ .getScript () ha hanno accesso al contesto globale. È possibile utilizzare qualsiasi variabile globale (o una funzione per questo) all'interno del tuo script esterno.
Altri suggerimenti
Nick Craver, ho solo spendere 3 (!) Ore ossessionato perché la mia cosa non avrebbe funzionato, e mi avete dato l'intuizione di cui avevo bisogno per farlo funzionare.
XOXOXOXOXOXOXOXO
interessante notare:
è possibile dichiarare una variabile come var jQuery come questo:
$variableName = something;
In questo modo jQuery ha anche accesso ad esso da qualsiasi parte del campo di applicazione.
$(function(){
$alertString = 'Hello World';
$.getScript('test.js', function(){
// do nothing
});
}
test.js:
alert( $alertString );
Ho trovato la risposta qui utile per la mia comprensione del tema, ma io ancora non riusciva a farlo funzionare nel mio contesto fino a quando mi è capitato su questo articolo su TechMonks :
Quando copio / incollato il loro ultimo esempio nella testa dei miei principali file .js tutto solo ha funzionato. Per me almeno, la funzione $ .getScript () era rotto, e questa è la correzione:
jQuery.extend({
getScript: function (url, callback) {
var head = document.getElementsByTagName("head")[0] || document.documentElement;
var script = document.createElement("script");
script.src = url;
// Handle Script loading
{
var done = false;
// Attach handlers for all browsers
script.onload = script.onreadystatechange = function () {
if (!done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete")) {
done = true;
//success();
//complete();
if (callback) callback();
// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
if (head && script.parentNode) {
head.removeChild(script);
}
}
};
}
head.insertBefore(script, head.firstChild);
return undefined;
}
});