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

时间:2015-01-28 10:58:01

标签: javascript php jquery

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

现在,这是我的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.");
    }
});

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

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

感谢。

1 个答案:

答案 0 :(得分:3)

JavaScript在单个线程上运行,因此它总是在调用下一个函数之前等待函数返回。但是,$.get执行AJAX调用,因此会触发回调函数。

大多数&#34; JS&#34; 式的实现目标的方式(在完成AJAX调用之后将电话推迟到)将会移动说代码到success回调:

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

PS:<? echo不要使用短开标签。它们可以关闭。使用<?php echo或不太危险的短回声标记:<?= $variable ?>
后者不能再被禁用(since PHP 5.4