这是两个功能。
function getUserInformation(UserID) {
$.post("assets/scripts/chat/get_user_info.php", {
UserID: UserID
}, function (data) {
if (data == "error") {
alertBar('negative', 'There was an error sending the message');
}
window.username = data;
})
}
function CreateChatBox(UserID) {
if ($('#' + UserID).length == 0) {
getUserInformation(UserID);
alert(username);
}
我的问题是,当CreateChatBox()
函数执行时,必须单击两次以使其实际工作。如果我从getUserInformation()
函数中删除CreateChatBox()
函数,CreateChatBox()
函数成功执行。
有人可以帮我解决这个问题吗?感谢。
---编辑(额外细节)----
当我点击链接<a onclick = "CreateChatBox()">Some link</a>
时,没有任何反应。但是当我第二次点击它时它确实有效。如果我从getUserInformation()
函数中删除函数CreateChatBox()
,则CreateChatBox()
函数会在第一次单击链接时起作用。
答案 0 :(得分:3)
这是因为你没有等待ajax响应完成。当您第一次单击时,通过post
进行ajax调用,然后通过第二次单击,响应最有可能,以便您获得它。您可以在成功处理程序中看到此推送警报。
function getUserInformation(UserID) {
$.post("assets/scripts/chat/get_user_info.php",
{
UserID: UserID
},
function(data){
if (data == "error") {
alertBar('negative','There was an error sending the message');
}
window.username = data;
alert(window.username);
});
}
function CreateChatBox(UserID) {
if ($('#'+UserID).length==0) {
getUserInformation(UserID);
}
//alert(username);
}
答案 1 :(得分:1)
这是AJAX,这意味着请求是异步的。你应该做的是将回调函数作为getUserInformation
的第二个参数传递,当数据可用时将调用该参数:
function getUserInformation(UserID, callback) {
$.post("assets/scripts/chat/get_user_info.php", {UserID: UserID}, function(data) {
if (data == "error") {
alertBar('negative', 'There was an error sending the message');
}
callback(data);
})
}
function CreateChatBox(UserID) {
if ($('#'+UserID).length == 0) {
getUserInformation(UserID, function(username) {
alert(username);
});
}
}