我有以下代码:
$(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);
}
});
});
(顺便说一句,我在这里使用合并库,但我认为这不重要)
我遇到的问题是,“西班牙语”和“英语”两个变量都不是全局的,所以$('#compare')。mergely无法得到它们的值(它说它们都是空的,但是这不是真的)。我怎样才能解决这个问题?我认为通过在任何函数之外声明任何变量,它们会自动变为全局变量,但显然它不起作用,或者我有点迷失。
非常感谢。
答案 0 :(得分:2)
它们不是全局的事实不是问题。你有它们的范围很好。
问题是,您在之前调用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);
}
});
});
});
但是,您可以完全避免使用这些变量,因为当您使用$.when
时,回调会从两个承诺中获取值;请注意,因为它是$.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]
}
});
});
});