Javascript 函数之间的Jquery和全局变量范围问题
我有以下代码:Javascript 函数之间的Jquery和全局变量范围问题,javascript,jquery,Javascript,Jquery,我有以下代码: $(document).ready(function () { var english = ""; var spanish = ""; $.get("./gamelist-english.txt",function(data){ english = data; }); $.get("./gamelist-spanis
$(document).ready(function () {
var english = "";
var spanish = "";
$.get("./gamelist-english.txt",function(data){
english = data;
});
$.get("./gamelist-spanish.txt",function(data){
spanish = data;
});
$('#compare').mergely({
cmsettings: { readOnly: true, lineNumbers: true },
lhs: function(setValue) {
setValue(english);
},
rhs: function(setValue) {
setValue(spanish);
}
});
});
(顺便说一句,我正在这里使用mergely库,但我认为这不重要)
我的问题是,“西班牙语”和“英语”这两个变量都不是全局变量,因此$(“#compare”).mergely无法获取它们的值(它说它们都是空的,但事实并非如此)。我怎样才能解决这个问题?我认为,通过在任何函数之外声明任何变量,它们会自动变为全局变量,但显然这不起作用,或者我有点迷路了
非常感谢。问题不在于他们不是全球人。你有他们在的范围是好的 问题是,在这些变量中有值之前,您正在调用
mergely
,因为ajax是异步的。请等待呼叫完成:
$(document).ready(function () {
var english = "";
var spanish = "";
$.when(
$.get("./gamelist-english.txt",function(data){
english = data;
}),
$.get("./gamelist-spanish.txt",function(data){
spanish = data;
})
).then(function() {
$('#compare').mergely({
cmsettings: { readOnly: true, lineNumbers: true },
lhs: function(setValue) {
setValue(english);
},
rhs: function(setValue) {
setValue(spanish);
}
});
});
});
但是,您可以完全避免使用这些变量,因为当您使用$时,回调函数从两个承诺中接收值;请注意,由于它是一个$.get
,因此该值是一个数组,其中数据作为数组中的第一项
$(document).ready(function () {
$.when(
$.get("./gamelist-english.txt"),
$.get("./gamelist-spanish.txt")
).then(function(english, spanish) {
$('#compare').mergely({
cmsettings: { readOnly: true, lineNumbers: true },
lhs: function(setValue) {
setValue(english[0]); // <== Note the [0]
},
rhs: function(setValue) {
setValue(spanish[0]); // <== Note the [0]
}
});
});
});
$(文档).ready(函数(){
美元。什么时候(
$.get(“./gamelist english.txt”),
$.get(“./gamelist西班牙语.txt”)
).然后(函数(英语、西班牙语){
$(“#比较”)。合并({
cmsettings:{readOnly:true,lineNumbers:true},
lhs:功能(设定值){
setValue(英语[0]);//它们不需要是全局的。它们的作用域很好。(你在传递给ready
的匿名函数中声明它们,而不是全局的)。^^^昆廷说了什么。此外,不让它们成为全局的是一件好事™. :-)@Quentin如果我在GET函数中写“console.log(english)”,我可以得到值,但是,如果我在.mergely()中做同样的事情,console.log不会打印任何内容:S如果作用域正常,什么是故障?(T.J.Crowder回答)@阿图罗-看重复的问题。@Quentin非常感谢你!是的!这很有效。我没有想到。非常感谢!