为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幕布斯6054654 2022-05-20 19:15:39
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的方法必须是单独的函数,因为有很多地方要用到这个函数,谢谢啦!!!
查看完整描述

3 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

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);});



查看完整回答
反对 回复 2022-05-23
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

你的 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.

查看完整回答
反对 回复 2022-05-23
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

$.ajaxSetup({
async:false
})

查看完整回答
反对 回复 2022-05-23
  • 3 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信