作为前端菜鸟,总会遇到一些傻傻的问题(指代本人),今天就刚好又遇到一则
用JQ的ajax异步请求数据库中的页面菜单权限数据,然后动态打印在菜单栏中,然后给其安装个点击事件来切换不同权限对应的内容页面:
$.ajax({
url: 'index.php?p=home&c=Menu&a=getMenu',
type: 'POST',
async:true,
dataType: 'json',
success:function(data){
if(data['num']==1001){
$("#menu").html('');
var menuStr='';
//打印菜单
for(var key in data['res']){
menuStr += '<details><summary class="firstMenu">'+data['res'][key]['name']+'</summary>';
if(data['res'][key]['sub']!=null){
for (var subKey in data['res'][key]['sub']) {
menuStr+='<p class="secondMenu" url="'+data['res'][key]['sub'][subKey]['url']+'">'+data['res'][key]['sub'][subKey]['name']+'</p>';
}
}
menuStr+='</details>';
}
//打印菜单
$("#menu").html(menuStr);
}else if(data['num']==1002){
alert(data['tip']);
}
},
error:function(){
alert('服务器错误');
}
});
打印完后给菜单在安装点击事件:
$(".secondMenu").on('click',function(){
alert(1);
});
但是点击并没有效果。为什么会没有效果,本菜鸟一阵费解,思考了一会儿,是不是安装点击事件时菜单还没完成打印?既然如此就改用同步请求,这样的话打印肯定已经执行完,页面菜单的元素肯定存在,试了一下果然是可以的,但是控制台抛出了提示:
Synchronous XMLHttpRequest on the main thread
$("#menu").html(menuStr);
//菜单跳转
$(".secondMenu").on('click',function(){
alert(1);
});
解决完问题深深感觉到基础还是不扎实,对异步同步的了解不够深刻,今后要好好加油!