一尘不染

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

ajax

我对JavaScript比较陌生,我想我知道回调函数的工作原理,但是在搜索Web几个小时后,我仍然不明白为什么我的代码不起作用。

我正在提出一个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显示为未定义。谁能向我解释为什么未设置此参数,以及如何在回调函数中设置局部变量。


阅读 254

收藏
2020-07-26

共1个答案

一尘不染

这里的问题是console.logajax调用异步执行时同步执行。因此它在回调完成之前运行,因此仍显示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();
    }});
});
2020-07-26