$.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)又能显示出最里面一层,求解这是怎么回事儿,是缓存么?
看你的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也应该提出来个函数...
谢谢,你说的是对的,可是还是有点不能理解,第二层success完了之后得到一个值,复制到第二层的变量里面,为什么说调用没完呢?
弄懂了,异步调用理解的还不够,O(∩_∩)O谢谢