jqueryの同期非同期問題
1683 ワード
滝の流れの写真の壁の効果をするときに発生する問題です.jqueryのpostメソッドでphp urlを呼び出し,返されたjsonデータループに基づいてhtmlコードを生成する.str変数に値を割り当てるとpost匿名関数にalert strが値し,post匿名関数外で印刷しても値しないことが分かった.
コードは次のとおりです.
友人の注意によると、ajax同期非同期の問題、すなわちpostの内容がまだ実行されていないため、すでに実行を開始している.だからこのような状況が発生します.
解決方法:
jqueryのajaxメソッドを使用します.asyncがfalseに設定されている場合は同期し、trueは非同期です.
コードは次のとおりです.
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は非同期です.