我有user_permissions
变量,我定义为全局使用,在post方法上设置后我没有打印问题,但是在下面的许多行中使用此变量之后我得到null
结果???
jQuery (最小代码):
var user_permissions = null;
$(document).ready(function(e) {
$.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"}
},'json');
$.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>";
});
});
我的代码问题是什么?
答案 0 :(得分:2)
这是因为.post()
是异步的,而您的.each()
是在您的帖子完成之前执行的,
您需要在回调后移动.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');
答案 1 :(得分:1)
$ .each部分中的代码在$ .post调用完成之前执行。
Javascript是异步的,所以它继续执行代码而不等待前面的事情完成。
您可以尝试类似$ .when以确保在继续之前已经完成某些事情,或者将其放入回调函数中以用于您正在等待的任何内容。
答案 2 :(得分:0)
更改为以下代码后,我的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);