Как использовать функцию, присутствующую в файле JS (загружается с помощью Ajax) в других разделах скрипта? - PullRequest
1 голос
/ 05 декабря 2011

У меня есть приложение ExtJs, которое загружает довольно много javascript-файлов.Это приводит к большим накладным расходам, и, следовательно, мы теперь загружаем файлы javascript с использованием Ajax.

Таким образом, когда пользователь нажимает кнопку, тогда файл javascript, содержащий функцию, связанную с кнопкой, загружается с использованием Ajax следующим образом:

Ext.Ajax.request({
    url:'filePath',
    success:function(response){
        eval(response.responseText);
        functionAssociatedWithButton();//Calling here the function associated with button
    },
    failure:function(){
        return;
    }
});

functionAssociatedWithButton();//Calling here the same function throws an error of function being undefined

Проблема в том, что эта функция - functionAssociatedWithButton () - которая присутствует в файле JS, загруженном с использованием Ajax, доступна и выполняется только в функции успеха запроса Ajax.

Но если мы попытаемся получить доступ к этой функции в любом другом разделе скрипта, то движок JS выдаст ошибку - функцияAssociatedWithButton () не определена.

Как могла бы такая функция, которая присутствует вфайл JS, загруженный с помощью Ajax, будет доступен в остальной части скрипта?

Я пытался использовать 4-й вариант , предложенный здесь - но это тоже не решило проблему.

Может ли кто-нибудь пролить свет на это.

Заранее спасибо.

PS: Полный сценарий написан внутри функции onReady ExtJS.Кроме того, учитывая возможность того, что Ajax не мог быть загружен функцией time, вызывается где-то еще, я попробовал этот случай, вызвав функцию после завершения загрузки Ajax (используя isLoading () и setTimeOut ()), но даже когда Ajax имеетПосле завершения загрузки функция распознается только в функции успеха Ajax и не распознается где-либо еще в скрипте.

1 Ответ

1 голос
/ 05 декабря 2011

Это связано с scope созданной вами функции.Функция будет доступна только в функции success;вы фактически получаете следующий сценарий:

function foo() {
    function bar() {
        window.alert("hello");
    }
}

console.log(typeof foo); // function
console.log(typeof bar); // undefined

У вас может быть глобальный объект пространства имен, к которому вы добавляете функцию, что-то вроде:

var test = {};

function foo() {
    test.bar = function () {
        window.alert("hello");
    }
}

console.log(typeof foo); // function
foo();
console.log(typeof test.bar); // function
...