所以我希望仪表板能够在一个功能内部进行修改,然后在另一个功能中显示。有点像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。
答案 0 :(得分:3)
ajax调用是异步的,因此在实际填充仪表板之前,在init()方法中调用显示XML()函数。所以这样做:
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);
}
答案 1 :(得分:2)
javascript中只有两种范围 - 全局和函数。如果它没有在函数内声明,那么它是全局的。如果它没有使用var声明,那么它也是隐式全局的。
答案 2 :(得分:1)
var
关键字将变量声明为本地变量,否则您可以省略它并使其成为全局变量。
另一个选项是将它插入窗口对象,如下所示:
window.dashboard = new Array();
这是将变量插入全局范围的首选方法。
同样地说,不要滥用你可能知道的全局变量。
答案 3 :(得分:1)
如果你想在javascript中使用类似Java的类语义,请使用Revealing Module模式。
http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/#revealingmodulepatternjavascript
养成从一开始就正确组织javascript代码的习惯,可以避免许多麻烦。
答案 4 :(得分:1)
您需要将context
传递给$.ajax()
$.ajax({
type: "GET",
url: "file:///H:/ModelDisplayV1/ModelDisplayV1/files/dashboard.xml",
dataType: "xml",
context: this,
success: xmlParser
});