请问我该如何做才能按照逻辑上执行,getJSON的方法必须是单独的函数?

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的方法必须是单独的函数,因为有很多地方要用到这个函数,谢谢啦!!!

幕布斯6054654
浏览 218回答 3
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.

慕田峪7331174

$.ajaxSetup({async:false})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
JQuery