jQuery 奇怪的 hoisting/initializing 行为
jQuery strange hoisting/initializing behaviour
$(function () {
//hard coded for initial debugging usage, must add table to reference
var userPermissionLevelRequired = 31;
var currentUserDescription = $('.user-menu .hidden-xs').html(); //to get user description
var userList = null;
var table = null;
var userName = $.grep(userDetail, function (item) {
return item.Description === currentUserDescription;
});
getUserMembers();
/*$.ajax({
'url': '/Home/GetUserMembers',
'type': 'GET',
dataType: "json",
'success': function (data) {
userList = data;
populateDropDown(data);
debugger;
},
'error': function (request, error) {
alert("Request: " + JSON.stringify(request));
}
});*/
function setPermission() {
//do something...
}
function getUserMembers() {
$.ajax({
'url': '/Home/GetUserMembers',
'type': 'GET',
'dataType': 'json',
'async':'false',
'success': function (data) {
userList = data;
populateDropDown(data);
debugger;
//alert("data.length " + data.length);
setPermission();
},
'error': function (request, error) {
alert("Request: " + JSON.stringify(request));
}
});
}
我想在被注释掉的 ajax 调用之后添加更多代码。但是在从 ajax 调用返回之前,代码会 运行 进一步。在 ajax 调用之后,我可以将 setPermission 设置为 运行 的唯一方法是将调用置于 ajax 成功函数中。为什么我必须这样做????
实际上 $.ajax 函数默认是异步的,而不是 javascript 本身。使用异步属性,您实际上可以将行为更改为同步。
但是,你必须提到 false
不带引号 ,如下所示:
$.ajax({
'url': '/Home/GetUserMembers',
'type': 'GET',
'dataType': 'json',
'async': false,
'success': function (data) {
userList = data;
populateDropDown(data);
debugger;
//alert("data.length " + data.length);
setPermission();
},
'error': function (request, error) {
alert("Request: " + JSON.stringify(request));
}
});
在这种情况下,$.ajax 将表现为同步调用,您可以在其后有任何语句,而无需在成功块内调用 setPersmission()
。
$(function () {
//hard coded for initial debugging usage, must add table to reference
var userPermissionLevelRequired = 31;
var currentUserDescription = $('.user-menu .hidden-xs').html(); //to get user description
var userList = null;
var table = null;
var userName = $.grep(userDetail, function (item) {
return item.Description === currentUserDescription;
});
getUserMembers();
/*$.ajax({
'url': '/Home/GetUserMembers',
'type': 'GET',
dataType: "json",
'success': function (data) {
userList = data;
populateDropDown(data);
debugger;
},
'error': function (request, error) {
alert("Request: " + JSON.stringify(request));
}
});*/
function setPermission() {
//do something...
}
function getUserMembers() {
$.ajax({
'url': '/Home/GetUserMembers',
'type': 'GET',
'dataType': 'json',
'async':'false',
'success': function (data) {
userList = data;
populateDropDown(data);
debugger;
//alert("data.length " + data.length);
setPermission();
},
'error': function (request, error) {
alert("Request: " + JSON.stringify(request));
}
});
}
我想在被注释掉的 ajax 调用之后添加更多代码。但是在从 ajax 调用返回之前,代码会 运行 进一步。在 ajax 调用之后,我可以将 setPermission 设置为 运行 的唯一方法是将调用置于 ajax 成功函数中。为什么我必须这样做????
实际上 $.ajax 函数默认是异步的,而不是 javascript 本身。使用异步属性,您实际上可以将行为更改为同步。
但是,你必须提到 false
不带引号 ,如下所示:
$.ajax({
'url': '/Home/GetUserMembers',
'type': 'GET',
'dataType': 'json',
'async': false,
'success': function (data) {
userList = data;
populateDropDown(data);
debugger;
//alert("data.length " + data.length);
setPermission();
},
'error': function (request, error) {
alert("Request: " + JSON.stringify(request));
}
});
在这种情况下,$.ajax 将表现为同步调用,您可以在其后有任何语句,而无需在成功块内调用 setPersmission()
。