Как создать глобальную переменную в JavaScript? - PullRequest
0 голосов
/ 08 марта 2012

Итак, я бы хотел, чтобы панель инструментов могла изменяться внутри одной функции, а затем отображаться в другой функции.Вроде как публичная переменная в Java.Это возможно?См. Мой код ниже.

var dashboard = new Array();
function init() {
    getXML(); //1.  goto get XML 2.// XML Parser
    displayXML();
}

function getXML() {
    console.log("getXML REACHED");
    $.ajax({
        type: "GET",
        url: "file:///H:/ModelDisplayV1/ModelDisplayV1/files/dashboard.xml",
        dataType: "xml",
        success: xmlParser
    });
}

function xmlParser(xml) {
    dashboard[0] = 7;
    console.log(dashboard);
});
}

function displayXML() {
    console.log("display xml function reached!!!");
    console.log(dashboard);
}

Когда я наконец пытаюсь получить console.log(dashboard), там написано dashboard is undefined.Я думал, объявив панель инструментов вне моих функций, она станет глобальной.Как мне сделать так, чтобы я мог изменять содержимое панели мониторинга в одной функции и получать их в другой функции?

Я больше знаком с Java, чем с Javascript.

Ответы [ 5 ]

3 голосов
/ 08 марта 2012

Вызов ajax является асинхронным, поэтому функция displayXML () вызывается в методе init () до фактического заполнения панели мониторинга. Так что сделайте это вместо:

var dashboard = new Array();
function init() {
    getXML(); //1.  goto get XML 2.// XML Parser
}

function getXML() {
    console.log("getXML REACHED");
    $.ajax({
        type: "GET",
        url: "file:///H:/ModelDisplayV1/ModelDisplayV1/files/dashboard.xml",
        dataType: "xml",
        success: xmlParser
    });
}

function xmlParser(xml) {
    dashboard[0] = 7;
    console.log(dashboard);
    displayXML();
});
}

function displayXML() {
    console.log("display xml function reached!!!");
    console.log(dashboard);
}
2 голосов
/ 08 марта 2012

В javascript есть только два вида областей действия - глобальная и функциональная. Если он не объявлен внутри функции, он глобален. Если он не объявлен с использованием var, он также неявно глобален.

1 голос
/ 08 марта 2012

Вам нужно передать context на $.ajax()

$.ajax({
    type: "GET",
    url: "file:///H:/ModelDisplayV1/ModelDisplayV1/files/dashboard.xml",
    dataType: "xml",
    context: this,
    success: xmlParser 
});
1 голос
/ 08 марта 2012

, если вы хотите, чтобы семантика Java-подобного класса в javascript рассматривалась с использованием шаблона модуля раскрытия.избавить вас от многих головных болей.

1 голос
/ 08 марта 2012

Ключевое слово var объявляет переменную как локальную, в противном случае вы можете опустить ее, и она станет глобальной.

Другой вариант - вставить ее в объект окна следующим образом:

window.dashboard = new Array();

Это предпочтительный метод для вставки переменных в глобальную область.

Кроме того, бла-бла-бла, о том, что вы не должны злоупотреблять глобальными переменными, которые вы, вероятно, знаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...