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先执行?
因为ajax是异步的, js执行的时候不会等待ajax回调,会继续执行后面的代码
嗯嗯,谢谢,解决了
因为ajax是异步的, js执行的时候不会等待ajax回调,会继续执行后面的代码
谢谢,解决了
getJson 是最先执行的么
getJson是先执行的,但是他是ajax的函数,具有异步的特性,就是说后面的代码不会等待getJson执行完就可以执行了,所以导致开始输出的是undefined,因为还没有赋值,我改成了这个样子:
$.ajax({
type: "POST",
url: "house/ifc2.js",
data: "",
async: false,//这句话就是阻止ajax异步的
dataType:"json",
success: function(data){
ifc2 = data;
}
});
@我心悦你: 改成同步就是放弃异步的优势了
@_York: 嗯,是这样的,但是要用那部分数据,没办法的啦