jQuery不能在主作用域中使用变量
我有jQuery不能在主作用域中使用变量,jquery,Jquery,我有user\u权限变量,并且我定义了全局使用,在post方法上设置此变量后,我没有打印此变量的问题,但是在下面的许多行中使用此变量后,我得到null结果 jQuery(最小代码): var user\u permissions=null; $(文档).ready(函数(e){ $.post('model/controller.php',{username:iId_username,postaction:'getUserPermission'}, 功能(数据){ 用户权限=0; 用户权限=dat
user\u权限
变量,并且我定义了全局使用,在post方法上设置此变量后,我没有打印此变量的问题,但是在下面的许多行中使用此变量后,我得到null
结果
jQuery(最小代码):
var user\u permissions=null;
$(文档).ready(函数(e){
$.post('model/controller.php',{username:iId_username,postaction:'getUserPermission'},
功能(数据){
用户权限=0;
用户权限=data.user\u权限;
console.log(user_permissions);//结果是:{“user_permissions”:“8”}
}“json”);
$.each(列表权限、功能(i、项){
如果(user_permissions==listPermissions[i].id)selected=“selected='selected'”;否则selected='';
console.log(用户权限);//结果为:null
selectElement+=“”+listPermissions[i]。权限\标题+“”;
});
});
我的代码有什么问题?那是因为
.post()
是异步的,而您的。每个()
都是在您的帖子完成之前执行的
您需要在post回调中移动.each()
$.post('model/controller.php', {
username: iId_username,
postaction: 'getUserPermission'
},
function (data) {
user_permissions = 0;
user_permissions = data.user_permissions;
console.log(user_permissions); // RESULT is : {"user_permissions":"8"}
$.each(listPermissions, function (i, item) {
if (user_permissions == listPermissions[i].id) selected = "selected='selected'";
else selected = '';
console.log(user_permissions); // RESULT is : null
selectElement += "<option value='" + listPermissions[i].id + "' " + selected + ">" + listPermissions[i].permission_title + "</option>";
});
}, 'json');
$.post('model/controller.php'{
用户名:iId_用户名,
postaction:'getUserPermission'
},
功能(数据){
用户权限=0;
用户权限=data.user\u权限;
console.log(user_permissions);//结果是:{“user_permissions”:“8”}
$.each(列表权限、功能(i、项){
如果(user_permissions==listPermissions[i].id)selected=“selected='selected';
否则选择=“”;
console.log(用户权限);//结果为:null
selectElement+=“”+listPermissions[i]。权限\标题+“”;
});
}“json”);
美元中的代码。每个部分都是在美元.post调用完成之前执行的
Javascript是异步的,因此它可以继续执行代码,而不必等待前面的事情完成
您可以尝试使用类似$。when的方法,以确保在继续之前已完成某项操作,或者将其放入回调函数中,以获取您正在等待的内容。更改为下面的代码后,我的
select
元素无法填充,但我可以在控制台中打印
selectElement = "<select style='width:100%;'>";
$.post('model/controller.php', {
username: iId_username,
postaction: 'getUserPermission'
},
function (data) {
user_permissions = 0;
user_permissions = data.user_permissions;
// selectElement = "<select style='width:100%;'>";
$.each(listPermissions, function (i, item) {
if (user_permissions == listPermissions[i].id) selected = "selected='selected'"; else selected = '';
selectElement += "<option value='" + listPermissions[i].id + "' " + selected + ">" + listPermissions[i].permission_title + "</option>";
});
// selectElement += "</select>";
// $('td :eq(5)',this).html(selectElement);
}, 'json');
selectElement += "</select>";
$('td :eq(5)',this).html(selectElement);
selectElement=”“;
$.post('model/controller.php'{
用户名:iId_用户名,
postaction:'getUserPermission'
},
功能(数据){
用户权限=0;
用户权限=data.user\u权限;
//selectElement=“”;
$.each(列表权限、功能(i、项){
如果(user_permissions==listPermissions[i].id)selected=“selected='selected'”;否则selected='';
selectElement+=“”+listPermissions[i]。权限\标题+“”;
});
//选择元素+=“”;
//$('td:eq(5)”,this.html(selectElement);
}“json”);
选择元素+=“”;
$('td:eq(5)”,this.html(selectElement);
您还不了解JavaScript中的异步脚本执行是如何工作的。
selectElement = "<select style='width:100%;'>";
$.post('model/controller.php', {
username: iId_username,
postaction: 'getUserPermission'
},
function (data) {
user_permissions = 0;
user_permissions = data.user_permissions;
// selectElement = "<select style='width:100%;'>";
$.each(listPermissions, function (i, item) {
if (user_permissions == listPermissions[i].id) selected = "selected='selected'"; else selected = '';
selectElement += "<option value='" + listPermissions[i].id + "' " + selected + ">" + listPermissions[i].permission_title + "</option>";
});
// selectElement += "</select>";
// $('td :eq(5)',this).html(selectElement);
}, 'json');
selectElement += "</select>";
$('td :eq(5)',this).html(selectElement);