2012-01-20 18 views
0

ここには2つの機能があります。

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>何も起こりませんリンクをクリックしてください。しかし、それをクリックすると2度目に機能します。 CreateChatBox()関数からgetUserInformation()関数を削除すると、リンクがクリックされたときに初めてCreateChatBox()関数が機能します。

+0

はどのようにあなたが言うか、それが実際に働いている:何をすべきデータが利用可能になったときに呼び出されます、あなたのgetUserInformationの2番目の引数としてコールバック関数を渡すことですか?どのような基準で? – Shyju

+1

'CreateChatBox()'を起動するクリックメカニズムは何ですか?あなたはそのコードを投稿できますか? –

+0

Some link」 – Frank

答えて

3

これは、あなたがajax応答が完了するのを待っていないからです。最初にクリックすると、postによってajaxコールが行われ、2回目のクリックで応答が得られる可能性が高くなります。あなたは成功ハンドラの中にこのパットアラートを見ることができます。

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

ああ、私はこれが問題だと思います。応答を介して2番目の時間がキャッシュされます。 – asawyer

+0

補足として、成功ハンドラに渡される最初の引数はjqXHRであり、2番目のものはステータスメッセージです。だからここで 'data'は決して" error "に等しくないでしょう。あなたは' function(data、msg){if(message === "error") ' – Sinetheta

1

これはリクエストが非同期であることを意味するAJAXです。

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); 
     }); 
    } 
} 
関連する問題