除非运行两次,否则jQuery $ .post()请求不起作用

时间:2012-01-20 18:03:51

标签: javascript jquery ajax function

这是两个功能。

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()函数会在第一次单击链接时起作用。

2 个答案:

答案 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);
        });
    }
}