使用jquery的getJSON方法改变了js的执行顺序,代码如下 var h = g...
发布网友
发布时间:2022-04-25 15:44
我来回答
共3个回答
热心网友
时间:2022-04-23 01:18
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-04-23 02:36
你的 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里还是会出现同样的问题
热心网友
时间:2022-04-23 04:11
$.ajaxSetup({
async:false
})