首页新闻找找看学习计划

$.getJSON()为什么最后才执行?

0
悬赏园豆:10 [已解决问题] 解决于 2018-06-07 17:32
window.onload=function(){
    var ifc2,ifc3,ifc4;
    
getJson("house/ifc2.js",ifc2);
getJson("house/ifc3.js",ifc3);
getJson("house/ifc4.js",ifc4);
console.log(ifc2);
console.log(ifc3);
console.log(ifc4);
    

function getJson(url,ifc){
        $.getJSON(url, function (data) {
            ifc = data;
         console.log(ifc);
})
    }
}

写了这样一段代码,得到这样的结果,为什么getJson函数外的console.log先执行?

 

我心悦你的主页 我心悦你 | 初学一级 | 园豆:73
提问于:2018-06-07 16:47
< >
分享
最佳答案
0

因为ajax是异步的, js执行的时候不会等待ajax回调,会继续执行后面的代码

收获园豆:10
、熙和 | 小虾三级 |园豆:1486 | 2018-06-07 16:52

嗯嗯,谢谢,解决了

我心悦你 | 园豆:73 (初学一级) | 2018-06-07 17:31
其他回答(2)
0

因为ajax是异步的, js执行的时候不会等待ajax回调,会继续执行后面的代码

土生搞IT | 园豆:18 (初学一级) | 2018-06-07 16:54

谢谢,解决了

支持(0) 反对(0) 我心悦你 | 园豆:73 (初学一级) | 2018-06-07 17:32
0

getJson 是最先执行的么

_York | 园豆:2 (初学一级) | 2018-06-08 09:38

getJson是先执行的,但是他是ajax的函数,具有异步的特性,就是说后面的代码不会等待getJson执行完就可以执行了,所以导致开始输出的是undefined,因为还没有赋值,我改成了这个样子:

$.ajax({
type: "POST",
url: "house/ifc2.js",
data: "",
async: false,//这句话就是阻止ajax异步的
dataType:"json",
success: function(data){
ifc2 = data;
}
});

支持(0) 反对(0) 我心悦你 | 园豆:73 (初学一级) | 2018-06-08 09:44

@我心悦你: 改成同步就是放弃异步的优势了

支持(0) 反对(0) _York | 园豆:2 (初学一级) | 2018-06-08 10:52

@_York: 嗯,是这样的,但是要用那部分数据,没办法的啦

支持(0) 反对(0) 我心悦你 | 园豆:73 (初学一级) | 2018-06-08 10:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册