js输出顺序的问题
来源:3-6 改写站点导航中的下拉菜单
WittChen
2020-05-21 14:10:24
$(document).ready(function () { // 头部导航 var header_nav = $(".header-nav-right-item"); // 提取数据 var getData = function (dataFile) { var dataObj = $.getJSON(dataFile, function (data) { dataObj = data; console.log(dataObj); }); return dataObj; }; // 插入数据 var insertData = function (ele, text) { ele.innerHTML = text; }; header_nav.on("hover", function () { var ele = this; if (!this.getAttribute("status")) { // $.getJSON("js/header-data.json", function (data) { var a = ele.getElementsByTagName("a"); // var data_array = data[ele.dataset.type]; var data_array = getData("js/header-data.json"); console.log(data_array); for (key in a) { insertData(a[key], data_array[key]); // a[key].innerHTML = data_array[key]; } ele.setAttribute("status", true); // }) } }) });
3回答
同学你好,$.getJSON这个方法本身就是异步的,目前没有办法转成同步的,无法直接提取出来封装成一个函数使用。
建议:同学参考老师第一次给出的示例,在$.getJSON方法中,在获取到数据后,再进行其他操作。
祝学习愉快~
好帮手慕慕子
2020-05-21
同学你好,因为$.getJSON方法请求数据是异步的,所以会导致下图所示的,1处代码执行时,数据请求还没有返回结果,所以1处打印结果是undefined, 等数据返回了,才会执行2处的代码,输出对应的结果。
建议:直接在$.getJSON方法中,在获取到数据后,再进行其他操作,示例:
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
WittChen
提问者
2020-05-21
老师您好,这个问题我第一想到的是预解析,第二我想到的是回调函数;
且听我说的对不对,回调函数我不太理解,也不知道他的运行机制,但是我把它联想到了异步,很多程序异步执行的原理是事件循环,我想回调函数不是不是就是把要执行的放到一个事件循环的队列里了,因为是一个队列因此有执行的先后顺序,因此会引发上面的问题
相似问题