我对
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);
在控制台中,数组显示为undefined.任何人都可以向我解释为什么没有设置它以及如何在回调函数中设置局部变量.
解决方法
这里的问题是,当ajax调用异步执行时,console.log会同步执行.因此它在回调完成之前运行,因此它仍然将数组视为未定义,因为还没有运行成功.为了完成这项工作,您需要延迟console.log调用,直到成功完成.
$(document).ready(function() { var array; var runLog = function() { console.log(array); }; $.ajax({ type: 'GET',success: function(data){ array = data; runlog(); }}); });