jqueryの同期非同期問題

1683 ワード

滝の流れの写真の壁の効果をするときに発生する問題です.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は非同期です.