Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery不能在主作用域中使用变量_Jquery - Fatal编程技术网

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);