[英]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語句,isLiked =='',因此嘗試喜歡它已經被喜歡的狀態,而不是能夠點擊不同的按鈕而不是狀態。
所以,我需要做的是,每次點擊,運行$.get()
部分檢查我的isliked.php腳本,然后運行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
<? echo
, 請不要使用短開標簽。 它們可以關閉。 使用<?php echo
或危險性較小的短回聲標記: <?= $variable ?>
后者不能再被禁用( 因為PHP 5.4 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.