2012-01-20 51 views
0

這裏有兩個函數。

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()功能時,它爲了它的實際工作被點擊了兩次。如果我從CreateChatBox()函數中刪除getUserInformation()函數,則CreateChatBox()函數成功執行。

有人能幫我解決這個問題嗎?謝謝。

---編輯(額外的細節)----

當我點擊一個鏈接<a onclick = "CreateChatBox()">Some link</a>沒有任何反應。但是當我第二次點擊它時,它確實有效。如果我從CreateChatBox()函數中刪除功能getUserInformation(),則CreateChatBox()函數將在單擊鏈接時第一次起作用。

+0

How do you say它實際上工作嗎?在什麼基礎上? – Shyju

+1

什麼是觸發'CreateChatBox()'的點擊機制?你可以發佈該代碼嗎? –

+0

回答

3

這是因爲你沒有等待ajax響應完成。當您第一次點擊ajax呼叫時,通過post進行,然後通過第二次點擊,最有可能的答案是您可以獲得答案。您可以在成功處理程序中看到此警報。

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); 
} 
+0

啊,我想象這是問題。第二次通過響應被緩存。 – asawyer

+0

請注意,傳遞給成功處理程序的第一個參數是jqXHR,第二個參數是狀態消息。所以這裏'數據'永遠不會等於'錯誤',你想用'function(data,msg){if(message ===「error')' – Sinetheta

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