jQuery $.getScript - старые функции и переменные в исполняемом скрипте

Я выполняю JavaScript с помощью jQuery $.getScript. В исполняемом скрипте у меня нет доступа к функциям и переменным моего исходного файла.

Есть ли решение?

3 ответа

Решение

Сценарий, выполняемый $.getScript() , имеет доступ к глобальному контексту. Вы можете использовать любую глобальную переменную (или функцию в этом отношении) из вашего внешнего скрипта.

Ник Крэйвер, я просто провожу 3 (!) Часа, зацикливаясь на том, почему моя вещь не сработает, и вы дали мне понимание, которое мне было нужно, чтобы заставить его работать.

XOXOXOXOXOXOXOXO

интересно отметить:

Вы можете объявить переменную как переменную jquery следующим образом:

$variableName = something;

Таким образом, jquery также имеет к нему доступ из любой точки области видимости.

$(function(){ 
    $alertString = 'Hello World'; 

    $.getScript('test.js', function(){ 
        // do nothing 
    });    
} 

test.js: 

alert( $alertString ); 

Я нашел ответ здесь полезным для моего понимания темы, но я все еще не мог заставить его работать в моем собственном контексте, пока не наткнулся на эту статью на TechMonks:

Когда я скопировал / вставил их последний пример в заголовок моего основного файла.js, все это сработало. По крайней мере, для меня функция $.getScript() была сломана, и это исправление:

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;
 }
});
Другие вопросы по тегам