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