我正在尝试在函数外部调用此变量,但结果是未定义的。我理解没有var,变量可以在全局范围内调用,但我得到了未定义。我也尝试在函数外部设置var并调用它,但也没有成功。这是我的简化代码,谢谢:)
function function1() {
$.getJSON('random.json')
.success(successfunction)
.error(failfunction);
function successfunction(data) {
testvar = (data.name);
}
function failfunction(error) {
console.log(error);
}
};
console.log(testvar);
使用
$( document ).ajaxStop(function() {}
在ajax加载后加载var。
答案 0 :(得分:2)
它只在方法范围内可见,你必须在函数之外声明它(在这种情况下意味着全局)或者在函数调用中返回它:
var testvar2 = "var 2";
function function1() {
// parse json
return successfunction("data");
function successfunction(data) {
testvar2 = "var glob";
var testvar = "var ret";
return testvar;
}
function failfunction(error) {
console.log(error);
}
};
console.log(testvar2);
console.log(function1());
console.log(testvar2);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
应该避免声明全局变量并且不是好的做法,尝试尽可能小地定义变量的范围。如果任何其他js模块也声明了一个名为testvar2
的变量,那么可能会发生一些有趣的事情。
答案 1 :(得分:1)
尝试在成功函数中添加返回testvar而不是调用testvar
调用成功函数
function successfunction(data){
testvar = "var";
return testvar;
}
答案 2 :(得分:1)
如果您希望全局范围将您的变量附加到全局对象,如window
function successfunction(data){
window.testvar = "var";
}
通过这种方式,你将确保它变得全球化。
但是,您应该注意successfunction
是一个稍后将运行的回调:它在超时后运行&amp;只有ajax调用成功。