Запрос jQuery $ .post () не работает, если не выполняется дважды - PullRequest
0 голосов
/ 20 января 2012

Вот две функции.

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 ]

3 голосов
/ 20 января 2012

Это потому, что вы не ожидаете завершения ответа 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);
}
1 голос
/ 20 января 2012

Это 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);
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...