使用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的方法必须是单独的函数,因为有很多地方要用到这个函数,谢谢啦!!!
展开
 我来答
cainiaokan
2013-05-08 · TA获得超过2917个赞
知道小有建树答主
回答量:651
采纳率:66%
帮助的人:612万
展开全部

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);
});
马后雷鼓下扬州5058
2013-05-08 · TA获得超过4321个赞
知道小有建树答主
回答量:693
采纳率:33%
帮助的人:809万
展开全部
你的 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.
追问
return li放到each里还是会出现同样的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友46b235f5b2
2013-05-08 · TA获得超过1397个赞
知道小有建树答主
回答量:676
采纳率:100%
帮助的人:634万
展开全部
$.ajaxSetup({
async:false

})
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式