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

Ale*_*lex 8 javascript ajax jquery callback

我对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);
Run Code Online (Sandbox Code Playgroud)

在控制台中,array显示为未定义.任何人都可以向我解释为什么没有设置它以及如何在回调函数中设置局部变量.

Jar*_*Par 8

这里的问题是console.log在ajax调用异步执行时同步执行.因此它在回调完成之前运行,因此它仍然看作arrayundefined因为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();
    }});
});
Run Code Online (Sandbox Code Playgroud)