怎么使ajax获取数据的长度,给ajax外的元素使用?

qq_36509661 2017-03-09 05:20:15
var listcount;
$.ajax({
url:"json/hotellist.json",
type:"get",
dataType:"json",
success:function(data){
listcount=data.length;
}
});
console.log(listcount);
我把console.log(listcount);放在外面就变成undefined的了
...全文
462 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
蚂蚁上树 2017-03-10
  • 打赏
  • 举报
回复
引用 4 楼 u010576965 的回复:
首先,ajax是异步请求的,它不会阻塞代码往下执行,因此在你success赋值之前,它已经走到了console那一步,所以你得到undefined,想要解决我又两种方法,一种是在sunccess回调函数中console返回数据的length,另一种是用观察者模式,ajax返回结果后,通知外面已经获得数据,如下(简写): ajax({ ... suncess: function(data) { $(document).trigger('ajaxIsOk', data); } }); $(document).on('ajaxIsOk', function(e, results) { console.log(results.length); });
+1
v逆水行舟v 2017-03-09
  • 打赏
  • 举报
回复
首先,ajax是异步请求的,它不会阻塞代码往下执行,因此在你success赋值之前,它已经走到了console那一步,所以你得到undefined,想要解决我又两种方法,一种是在sunccess回调函数中console返回数据的length,另一种是用观察者模式,ajax返回结果后,通知外面已经获得数据,如下(简写): ajax({ ... suncess: function(data) { $(document).trigger('ajaxIsOk', data); } }); $(document).on('ajaxIsOk', function(e, results) { console.log(results.length); });
dreamerjdw 2017-03-09
  • 打赏
  • 举报
回复
不好意思没看清楼主的需求。 修改方法可以使用promise, var listcount; var promise = $.ajax({ url:"json/hotellist.json", type:"get", dataType:"json", success:function(data){ Promise.resolve(); } }); promise.done(function(data){ listcount=data.length; console.log(listcount); });
dreamerjdw 2017-03-09
  • 打赏
  • 举报
回复
$.ajax是一个异步请求,所以在控制台打印的语句要写在回调函数内才能正确获得值。 源代码实际执行顺序如下,第②步中还未执行回调函数,因此输出undefined。 修改方法:把console.log(listcount)写在回调函数中。 var listcount; $.ajax({ url:"json/hotellist.json", type:"get", dataType:"json", ③success:function(data){ listcount=data.length; } }); ②console.log(listcount);
waqxy 2017-03-09
  • 打赏
  • 举报
回复
如果不考虑效率问题的话,可以把异步改成同步

$.ajax({
async:'false',
})

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧