使用jquery的getJSON方法改变了js的执行顺序,代码如下 var h = g.creatDIV(e.url); console.log(h);
creatDIV:function(t){varli='';$.getJSON(t,function(data){t//是传入的url地址$.each(data,func...
creatDIV:function(t){
var li='';
$.getJSON(t,function(data){ t//是传入的url地址
$.each(data,function(x,y){
li+=y.title;//title是json字段
});
});
return li;
}
从逻辑上说h的值应该是return li 回传回来的值,但是执行的时候先执行了console.log(h);,然后才会执行return li,不知道为什么,请高手帮忙解释一下,教我如何做才能按照逻辑上执行,getJSON的方法必须是单独的函数,因为有很多地方要用到这个函数,谢谢啦!!! 展开
var li='';
$.getJSON(t,function(data){ t//是传入的url地址
$.each(data,function(x,y){
li+=y.title;//title是json字段
});
});
return li;
}
从逻辑上说h的值应该是return li 回传回来的值,但是执行的时候先执行了console.log(h);,然后才会执行return li,不知道为什么,请高手帮忙解释一下,教我如何做才能按照逻辑上执行,getJSON的方法必须是单独的函数,因为有很多地方要用到这个函数,谢谢啦!!! 展开
3个回答
展开全部
ajax请求默认是异步的。
var h = g.creatDIV(e.url); console.log(h);
你g.creatDIV方法中。返回的li永远是空字符串。因为.getJSON正在执行的过程中,你的li就已经返回了。
解决方法两种,一种是使用同步请求,即ajax的执行会阻塞代码的继续执行。
$.ajax({
type: "POST",
url: t,
data: "",
async: false,
dataType:"json",
success: function(data){
li+=y.title;
}
});
这样之后,后面的return li;
会等待请求结束,然后才会返回li
另一种解决方案是把你后续要执行的代码放到回调函数中执行。
creatDIV:function(t,cb){
var li='';
$.getJSON(t,function(data){ //t是传入的url地址
$.each(data,function(x,y){
li+=y.title;//title是json字段
cb(li);
});
});
}
var h = g.creatDIV(e.url,function(li){
alert("调用结束@! li的值是:" + li);
});
展开全部
你的 return 是写在 ajax 外面的,当函数执行,ajax 发出请求尚未结束的时候就已经 return 了。
cainiaokan 是正解,不过这正方法和直接调用 ajax 没有什么区别,都要等 ajax 结束才能操作。
async:false 也是一种办法,但 jQuery 官方非常不建议这样做,因为 async:false 会在 ajax 同时锁定浏览器,一切活动必须等待 ajax 结束才能继续。
Setting this option to false (and thus making the call no longer asynchronous) is strongly discouraged, as it can cause the browser to become unresponsive.
cainiaokan 是正解,不过这正方法和直接调用 ajax 没有什么区别,都要等 ajax 结束才能操作。
async:false 也是一种办法,但 jQuery 官方非常不建议这样做,因为 async:false 会在 ajax 同时锁定浏览器,一切活动必须等待 ajax 结束才能继续。
Setting this option to false (and thus making the call no longer asynchronous) is strongly discouraged, as it can cause the browser to become unresponsive.
追问
return li放到each里还是会出现同样的问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
$.ajaxSetup({
async:false
})
async:false
})
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询