新足迹

 找回密码
 注册

精华好帖回顾

· 三年理财经验谈-I work hard myself, and I want my money to work harder for me! (2007-12-22) Devil_Star · Sacred Valley - 探访印加文明 (2007-12-16) jeru
· 澳洲选车知识入门 (2012-2-13) garysu · 写给即将踏上澳洲土地的朋友们 (4) (2004-12-20) spirit1
Advertisement
Advertisement
查看: 1370|回复: 14

jQuery getJSON 的问题 [复制链接]

特殊贡献奖章

发表于 2011-6-29 16:39 |显示全部楼层
此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
先上代码
  1. var po_id;
  2.     var supplier_id = [];
  3.     $("input:checkbox:checked").each(function (){
  4.         po_id = $(this).val();
  5.         if( po_id !== "" && po_id !== 0){
  6.             $.getJSON("getpurchaseorder",{purchase_order_id: po_id}, function(j){
  7.                 supplier_id.push(j.supplier_contact_id);
  8.                 alert ("a="+supplier_id);
  9.             });
  10.             alert ("b="+supplier_id);
  11.         }
  12.     });
  13.     alert ("c="+supplier_id);
复制代码
这是一个表单,有一系列checkbox,check的时候检查其他checkbox的值来判断能不能同时选中

这里面a有值,每次循环都输出
b没有值,每次循环都输出
c没有值,只输出一次

问题:怎样可以在getJSON外面获得supplier_id?
我查了一下,好像因为getJSON是async的

另外这种async的call不是一个接一个执行,如果想再做一个ajax call,我只能把第二个套在第一个里面。有神马好办法解决这个问题。
Advertisement
Advertisement

2010年度奖章获得者

发表于 2011-6-29 16:46 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
嵌套太深,不好。

1. 吧所有checkbox选中的 放在一个数组里。

2. 吧这个数组一并传给servier, (通过$.getJSON)

3. 在callback 里,统一处理返回的数据,ie。 负值给b, c。

每个function都是single purpose。 方便test,方便维护和debug

评分

参与人数 2积分 +9 收起 理由
atransformer + 3 我很赞同
kr2000 + 6 谢谢奉献

查看全部评分

足迹 Reader is phenomenal. If you never used, you never lived 火速下载

特殊贡献奖章

发表于 2011-6-29 17:05 |显示全部楼层

回复 dalaohu 2# 帖子

此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
你这方法不错
是该这么写。只是这样要再写一个server side的function来处理数组。我偷懒了。

这个在getJSON里付值的变量是没办法在getJSON外面获得吗?有时候有些逻辑是要等getJSON的结果的

2010年度奖章获得者

发表于 2011-6-29 17:18 |显示全部楼层

回复 kr2000 3# 帖子

此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
一般都指定一个callback function,

callback里说明service call返回了数据,你才能继续其他的逻辑。后继逻辑可以放在callback 里。


数据还没返回,你也无法继续不是。

评分

参与人数 1积分 +5 收起 理由
kr2000 + 5 感谢分享

查看全部评分

足迹 Reader is phenomenal. If you never used, you never lived 火速下载

2010年度奖章获得者

发表于 2011-6-29 17:26 |显示全部楼层

回复 kr2000 3# 帖子

此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
call service 放在loop里call,不是偷懒的问题,是绝对要避免的。
call service 很贵的。

特殊贡献奖章

发表于 2011-6-29 17:36 |显示全部楼层
此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我明白了。这样很合理。

原帖由 dalaohu 于 2011-6-29 16:18 发表
一般都指定一个callback function,

callback里说明service call返回了数据,你才能继续其他的逻辑。后继逻辑可以放在callback 里。


数据还没返回,你也无法继续不是。


YES SIR! 我现在就去改。点一下要等的时间的确有点长。
call service 放在loop里call,不是偷懒的问题,是绝对要避免的。
call service 很贵的。
Advertisement
Advertisement

发表于 2011-6-29 18:04 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整
试过.queue() 么?

发表于 2011-6-29 18:05 |显示全部楼层
此文章由 porcorosso 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 porcorosso 所有!转贴必须注明作者、出处和本声明,并保持内容完整

评分

参与人数 1积分 +3 收起 理由
kr2000 + 3 感谢分享

查看全部评分

发表于 2011-6-29 20:19 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
首先同意dalaohu, 应该做一次性的request
如果实在要偷懒
可以在getJSON的callback里,也就是 supplier_id.push(j.supplier_contact_id);后判断一下是不是loop完了(并且都success了)
如果loop完了,就做你想做的,call另外一个函数

评分

参与人数 1积分 +3 收起 理由
kr2000 + 3 感谢分享

查看全部评分

发表于 2011-6-29 21:05 |显示全部楼层
此文章由 showen 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 showen 所有!转贴必须注明作者、出处和本声明,并保持内容完整
恩 jquery 1.5+可以考虑用deferred object

等所有的asnc操作结束后,执行其他的逻辑

http://api.jquery.com/jQuery.when

评分

参与人数 1积分 +3 收起 理由
kr2000 + 3 感谢分享

查看全部评分

发表于 2011-6-30 01:12 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Use callback
Sorry. Just had operation, single eyed. Can't type code for you

评分

参与人数 1积分 +3 收起 理由
kr2000 + 3 早日康复啊

查看全部评分

Advertisement
Advertisement

发表于 2011-6-30 01:17 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 o2h2o 于 2011-6-30 00:12 发表
Use callback
Sorry. Just had operation, single eyed. Can't type code for you

gree with large tigre

2010年度奖章获得者

发表于 2011-6-30 01:29 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 o2h2o 于 2011-6-30 00:12 发表
Use callback
Sorry. Just had operation, single eyed. Can't type code for you


what happended to your eyes??
足迹 Reader is phenomenal. If you never used, you never lived 火速下载

2007 年度奖章获得者

发表于 2011-6-30 01:39 |显示全部楼层
此文章由 coolioo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 coolioo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
json不错

特殊贡献奖章

发表于 2011-6-30 11:19 |显示全部楼层

回复 porcorosso 8# showen 10# 帖子

此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
看了一下Deferred
很有用啊
这贴子发的收益良多
谢谢各位

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部