我正在开发一个类似的系统,我设法让它工作,但为了让我能够正常工作,我需要它来检查状态是否被喜欢,如果是,然后不像它,如果没有,那就喜欢它。
现在,这是我的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变量。
感谢。
答案 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)