zfjdoreen 2013-07-05
做一个瀑布流照片墙效果的时候出现的问题。通过jquery的post方法调用php url,根据返回的json数据循环生成html代码。在给str变量赋值的时候,发现在post匿名函数里alert str有值,在post匿名函数外打印没值。
代码如下:
var str = ''; $.post(base_url+'/index.php/pic/ajaxGetPic/',{cat_id:1,page:1},function(data) { var obj = eval("("+data+")"); if(obj.length == 0) { alert("没有数据了!"); }else { $.each(obj,function(key,val) { str += '<div class="cell"><img src="'+val['pic_path']+'" /><p>'+val['pic_id']+'</p></div>'; }); } alert(str); }); alert(str);
经朋友提醒,是因为ajax同步异步的问题,也就是post中的内容尚未执行完毕,就已经往下开始执行了。所以会出现这种情况。
解决方法:
var str = ''; var cat_id = $('#id').val(); $.ajax({ type:"POST", url:base_url+'/index.php/pic/ajaxGetPic/', data:{cat_id:cat_id,page:index+1}, async:false, dataType:"json", success:function(data){ if(data.length == 0) { alert("没有数据了!"); }else { $.each(data,function(key,val) { str += '<div class="cell"><img src="'+val['pic_path']+'" /><p>'+val['pic_id']+'</p></div>'; }); } } });
使用jquery的ajax方法,其中async设置为false则同步,true则异步。