2012-01-20 4 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

어떻게 말합니까 실제로 노력하고 있습니다 : 당신이해야 할 데이터를 사용할 수있을 때 호출됩니다 getUserInformation의 두 번째 인수로 콜백 기능을 전달하는 것입니다? 무슨 근거로? – Shyju

+1

'CreateChatBox()'를 실행하는 클릭 메커니즘은 무엇입니까? 이 코드를 게시 할 수 있습니까? –

+0

'Some link ' – Frank

답변

3

당신이 아약스 응답을 완료하기를 기다리지 않기 때문입니다. 처음 클릭 할 때 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이고, 두 번째 인수는 상태 메시지입니다. 그래서 여기서'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); 
     }); 
    } 
} 
관련 문제