首页 新闻 会员 周边

ajax嵌套ajax,最里面一层ajax没用了

0
悬赏园豆:20 [已解决问题] 解决于 2012-08-14 09:21
 $.ajax({
                type: "POST",
                dataType: "json",
                url: proxyUrl,
                data: datas,
                beforeSend: function () { $("#" + P_ProgressBarDivId).show(); },
                complete: function () { $("#" + P_ProgressBarDivId).hide(); },
                success: function (msg) {
                   $("#" + P_ShowDataDivId).html("");
                   $.each(msg.data, function (i, item) {
                    var reval  = "";
                    reval += "<div class=\"bbsblock\">";
                    if (item.Reply_ID != null && item.Reply_ID != "") {
                     var PreReply="";
                     if(item.PreReply_ID>0)
                     {
                        var Url = SiteAppPath+"Ajax/YXAjax.ashx";
                        var adatas =  "&jsonType=GetReplyCom&ReplyID="+item.PreReply_ID;     
                        $.ajax({
                          type: "POST",
                          dataType: "text",
                          url: Url,
                          data: adatas,
                          success:function(msg){
                           PreReply=msg;
                         }});
                        
                     }
                     reval+=PreReply;
                     reval+=item.Reply_Content
                     reval += " </div>";
                      $("#" + P_ShowDataDivId).append(reval);
                    }
                    });
    
                },
                error: function (xhr, ajaxOptions, thrownError) {
                   alert(thrownError);
                     return;
                }
            });
        }

这个写的是一个论坛,有留言回复功能,最外一层ajax是从后台取出所有的留言,最里面一层是获得每层所引用回复,奇怪的是最里面一层ajax虽然执行了,可是最后显示并没有显示出来,在调试的时候,每一层设置一个alert(reval)又能显示出最里面一层,求解这是怎么回事儿,是缓存么?

cx199055的主页 cx199055 | 初学一级 | 园豆:4
提问于:2012-08-13 18:45
< >
分享
最佳答案
1

看你的ajax的调用,明显是用的异步.

那么第二层ajax调用后面的4行代码,就应该放到第二层调用的ajax的success里去.

(不然调用还没完呢,就去往页面上添加数据,那当然没有数据了!)

 1 if(item.PreReply_ID > 0)
 2 {
 3     var Url = SiteAppPath + "Ajax/YXAjax.ashx";
 4     var adatas = "&jsonType=GetReplyCom&ReplyID=" + item.PreReply_ID;     
 5     $.ajax({
 6         type: "POST",
 7         dataType: "text",
 8         url: Url,
 9         data: adatas,
10         success:function(msg){
11             reval+=PreReply;
12             reval+=item.Reply_Content
13             reval += " </div>";
14             $("#" + P_ShowDataDivId).append(reval);
15         }
16     });
17 }

※你的代码看起来有点累,变量命名也没有规范,第二个ajax也应该提出来个函数...

收获园豆:20
三阶 | 小虾三级 |园豆:1436 | 2012-08-13 19:03

谢谢,你说的是对的,可是还是有点不能理解,第二层success完了之后得到一个值,复制到第二层的变量里面,为什么说调用没完呢?

cx199055 | 园豆:4 (初学一级) | 2012-08-14 09:13

弄懂了,异步调用理解的还不够,O(∩_∩)O谢谢

cx199055 | 园豆:4 (初学一级) | 2012-08-14 09:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册