在JavaScript回调函数中设置局部变量

Setting local variable in a JavaScript callback function

本文关键字:设置 局部变量 函数 JavaScript 回调      更新时间:2023-09-26

我对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");
}
});
AJAX是异步的。您正在设置array变量,但要等到debug执行之后。进行AJAX调用会发送一个请求,但随后会在代码中继续。稍后,请求返回,并执行successerror函数。