让jQuery/Javascript等到另一个函数完成


Make jQuery/Javascript wait until another function is done

我正在开发一个类似系统,我设法让它工作,但为了让我让它正常工作,我需要它来检查状态是否被喜欢,如果是,那么不像它,如果没有,那就喜欢它。

现在,这是我的Javascript:

$('span#like-button<? echo $status_id; ?>').on('click', function(){
    var isLiked<?echo $status_id; ?> = '';
    var postid<? echo $status_id; ?> = $('input#postid<? echo $status_id; ?>').val();
    var userid<? echo $status_id; ?> = $('input#userid<? echo $status_id; ?>').val();
    var toid<? echo $status_id; ?> = $('input#toid<? echo $status_id; ?>').val();
    $.get('https://mysite/stuff/ajax/isliked.php', {postid: postid<?echo $status_id; ?>, userid: userid<?echo $status_id; ?>}, function(data){
        isLiked<?echo $status_id; ?> = data;
        console.log(data);
    });
    if(isLiked<?echo $status_id; ?> == "Yes"){
        console.log('Unliking Status');
    $.get('https://mysite/dash', {unlike: postid<? echo $status_id; ?>, userid: userid<? echo $status_id; ?>}, function(data){
        document.getElementById('like-button<? echo $status_id; ?>').innerHTML = 'Like';
    });
    } else if(isLiked<?echo $status_id; ?> == ""){
        console.log('Liking Status');
    $.get('https://mysite/dash', {like: postid<? echo $status_id; ?>, userid: userid<? echo $status_id; ?>, toid: toid<? echo $status_id; ?>},function(data){
        document.getElementById('like-button<? echo $status_id; ?>').innerHTML = 'Unlike';
    });
    } else {
        console.log("Error.");
    }
});

我的问题是它在运行$.get之前运行 if 语句以检查状态是否为喜欢。因此,对于 if 语句,isLike== '',从而尝试在已经喜欢的状态时喜欢它,而不是能够单击"不喜欢"按钮来"不喜欢状态"。

所以,我需要做的是,每次点击,运行它检查我的 isliked.php 脚本的$.get()部分,然后运行 if() 语句来检查isLiked变量。

谢谢。

JavaScript 在单个线程上运行,因此在调用下一个函数之前,它将始终等待函数返回。但是,$.get执行 AJAX 调用,因此存在触发回调函数的事件。

实现目标的最"JS"风格(将调用推迟到 AJAX 调用完成后)是将所述代码移动到success回调:

$.get(url, data, function()
{
    //will only get called after first $.get is done
    $.get(url2, data2, function()
    {
    });
});

PS:<? echo请不要使用简短的开场标签。它们可以被关闭。使用<?php echo或危险性较低的短回声标签:<?= $variable ?>
后者不能再禁用(从 PHP 5.4 开始)