jquery的同步异步问题

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则异步。

相关推荐