在jquery中使用ajax获取和分配数据时,如何控制代码的执行顺序?
这些是我的代码的一部分: 我的问题是,用户名分配表达式是在函数getuserinformation(userId)之前执行的,我甚至认为我把getuserinformation()放在了它们前面 全局变量:在jquery中使用ajax获取和分配数据时,如何控制代码的执行顺序?,jquery,ajax,Jquery,Ajax,这些是我的代码的一部分: 我的问题是,用户名分配表达式是在函数getuserinformation(userId)之前执行的,我甚至认为我把getuserinformation()放在了它们前面 全局变量: userInformation = {}; 调用事件以分配值的函数: function assignValues(){ getUserInfomation(userId); userName = userInformation['user_name']; // u
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]);
});
}
}
});
}
非常感谢 您需要在.ajax调用的success函数中执行赋值操作
$.ajax是一个异步操作,因此当您调用它时,它会立即返回执行代码的下一行(在本例中,userName=..),但您尚未从服务器返回数据,这就是成功回调的目的。$。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) {
...