这些是我的代码的一部分:
我的问题是 userName assign expression 在函数 getUserInfomation(userId)之前执行,甚至认为我把 getUserInfomation()放入在他们面前。
全局变量:
userInformation = {};
函数调用事件来赋值:
function assignValues(){
getUserInfomation(userId);
userName = userInformation['user_name']; // undefined
userNickName= userInformation['user_nickname'];// undefined
}
通过AJAX从数据库获取数据的功能:
function getUserInfomation (userId){
$.ajax({
url: 'include/user.login.process.php',
data:({userId: userId }),
success: function(data) {
if(data){
JSON.parse(data, function (key, value) {
userInformation[key] = value;
console.log(key +' value is '+obj.userInformation[key]);
});
}
}
});
}
非常感谢你!
答案 0 :(得分:1)
您需要在.ajax调用
的成功函数内执行赋值操作$ .ajax是一个异步操作,因此当你调用它时,它会立即返回执行代码的下一行(在本例中为userName = ....),但是你还没有从中获取数据服务器,这就是成功回调的目的。
答案 1 :(得分:1)
$ .ajax方法是异步的。 您必须更改为将ajax请求后必须执行的所有代码放入回调函数: 所以,你必须使用这样的代码:
function getUserInfomation (userId){
$.ajax({
url: 'include/user.login.process.php',
data:({userId: userId }),
success: function(data) {
if(data){
JSON.parse(data, function (key, value) {
userInformation[key] = value;
console.log(key +' value is '+obj.userInformation[key]);
assignValues();
});
}
}
});
}
此外,您可以同步调用ajax函数。但这是一种不好的做法,因为你将失去ajax的优势。
$.ajax({
url: 'include/user.login.process.php',
data:({userId: userId }),
async:false,
success: function(data) {
...