2012-01-20 3 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() выполнена, она должна быть нажата два раза для того, чтобы она на самом деле работает. Как бы то ни было, если я удаляю функцию getUserInformation() из функции CreateChatBox(), функция CreateChatBox() выполняется успешно.

Может ли кто-нибудь помочь мне в этом вопросе? Благодарю.

--- Edit (дополнительная деталь) ----

Когда я нажимаю ссылку <a onclick = "CreateChatBox()">Some link</a> ничего не происходит. Но когда я нажимаю его, второй раз он работает. Если я удалю функцию getUserInformation() из функции CreateChatBox(), функция CreateChatBox() будет работать в первый раз при нажатии ссылки.

+0

как вы говорите, что на самом деле работает? на каком основании? – 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, второй - это сообщение о состоянии. Таким образом, здесь 'data' никогда не будет равняться« ошибке », вы хотите пойти с' 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); 
     }); 
    } 
} 
Смежные вопросы