在JavaScript回调函数中设置局部变量
Setting local variable in a JavaScript callback function
我对JavaScript还比较陌生,我以为我知道回调函数是如何工作的,但在网上搜索了几个小时后,我仍然不明白为什么我的代码不工作。
我正在做一个AJAX请求,它返回一个字符串数组。我正试图将这个数组设置为一个局部变量,但它似乎在执行回调函数后就失去了值。
var array;
$.ajax({
type: 'GET',
url: 'include/load_array.php',
dataType: 'json',
success: function(data){
array = data;
},
error: function(jqXHR, textStatus, errorThrown){
alert("Error loading the data");
}
});
console.debug(array);
在控制台中,array
显示为未定义。有人能向我解释为什么没有设置这个,以及如何在回调函数中设置局部变量吗。
这里的问题是console.log
同步执行,而ajax调用异步执行。因此,它在回调完成之前运行,因此它仍然将array
视为undefined
,因为success
尚未运行。为了完成此操作,您需要将console.log
调用延迟到success
完成之后。
$(document).ready(function() {
var array;
var runLog = function() {
console.log(array);
};
$.ajax({
type: 'GET',
url: 'include/load_array.php',
dataType: 'json',
success: function(data){
array = data;
runlog();
}});
});
ajax中的第一个A用于异步,这意味着在调试阵列时,结果仍然没有交付。数组在显示其值时未定义。您需要在array=data下面执行console.debug。
success
函数不会立即执行,而是仅在HTTP响应到达之后执行。因此,此时array
仍然是undefined
。如果要对HTTP响应数据执行操作,请从success
函数中执行,或者在函数中定义该操作,然后从success
回调中调用该函数。
尝试在success
:之后调用一个函数来设置此变量
var array;
var goodToProceed = function(myArr) {
console.debug(myArr);
};
$.ajax({
type: 'GET',
url: 'include/load_array.php',
dataType: 'json',
success: function(data){
goodToProceed(data);
},
error: function(jqXHR, textStatus, errorThrown){
alert("Error loading the data");
}
});
array
变量,但要等到debug
执行之后。进行AJAX调用会发送一个请求,但随后会在代码中继续。稍后,请求返回,并执行success
或error
函数。
相关文章:
- 在javascript函数中设置全局变量
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- Javascript用函数return替换局部变量
- 为两个ID设置一个变量的正确语法
- 正在Javascript响应中设置会话变量
- 每次调用函数时,都要修改Javascript中的局部变量
- 局部变量在闭包中丢失
- 试图将一个局部变量传递给我的ngAside控制器
- Mongoose从查询中设置本地变量
- jQuery在MVC应用程序中设置JS变量
- jQuery.ajax()访问javascript循环中的beforeEnd局部变量
- 使用eval()设置全局变量
- 如何使用字符串设置局部变量
- 设置局部变量时非常奇怪的JavaScript行为
- 在JavaScript回调函数中设置局部变量
- 将default设置为模型中的局部变量将导致未定义
- 我可以设置一个局部变量为'this'在匿名回调函数中引用它
- 将Javascript局部变量设置为全局变量以实现递归循环
- 如何在mean.io中将用户名设置为所有视图可用的局部变量
- Javascript全局函数设置局部变量