2016-06-08 57 views
0

我有以下代碼:如何在另一個功能完成後立即激活功能?

<script> 
function refreshChat() { 
    var id = "'.$convers_id.'"; 
    var receiver = "'.$system->getFirstName($second_user->full_name).'"; 
    $.get("'.$system->getDomain().'/ajax/refreshChat.php?id="+id+"&receiver="+receiver, function(data) { 
     $(".conversation-content").html(data); 
    }); 
    var scroller = $(".conversation-message-list").getNiceScroll(0); 
    $(".conversation-message-list").getNiceScroll(0).doScrollTop($(".conversation-content").height(),-1); 
} 
window.setInterval(function(){ 
    refreshChat(); 
}, 2000); 

function sendMessage() { 
    var user2 = "'.$user2.'"; 
    var message = $("#message"); 
    if(message.val() != "" && message.val() != " ") { 
     $.get("'.$system->getDomain().'/ajax/sendMessage.php?id="+user2+"&msg="+encodeURIComponent(message.val()), function(data) { 
     $(".conversation-content").html(data); 
      message.val(""); 
     }); 
    } 
} 
$(document).keypress(function(e) { 
    if(e.which == 13) { 
     sendMessage(); 
    } 
}); 
</script> 

眼下,refreshChat函數調用的AJAX腳本,每2秒。當您輸入消息並按下回車鍵時,它會調用一個不同的ajax腳本。我想要做的是同時調用兩個函數。所以腳本首先調用sendMessage函數,然後刷新。

我該怎麼做?我已經嘗試將其更改爲:

<script> 
function refreshChat() { 
    var id = "'.$convers_id.'"; 
    var receiver = "'.$system->getFirstName($second_user->full_name).'"; 
    $.get("'.$system->getDomain().'/ajax/refreshChat.php?id="+id+"&receiver="+receiver, function(data) { 
     $(".conversation-content").html(data); 
    }); 
    var scroller = $(".conversation-message-list").getNiceScroll(0); 
    $(".conversation-message-list").getNiceScroll(0).doScrollTop($(".conversation-content").height(),-1); 
} 

function sendMessage() { 
    var user2 = "'.$user2.'"; 
    var message = $("#message"); 
    if(message.val() != "" && message.val() != " ") { 
     $.get("'.$system->getDomain().'/ajax/sendMessage.php?id="+user2+"&msg="+encodeURIComponent(message.val()), function(data) { 
      $(".conversation-content").html(data); 
      message.val(""); 
     }); 
    } 
} 
$(document).keypress(function(e) { 
    if(e.which == 13) { 
     sendMessage();refreshChat(); 
    } 
}); 
</script> 

但是,這只是第一個進入的消息,並且只刷新第二按鍵(輸入)。我想先謝謝大家幫助我。

回答

2

這實際上是一種錯覺。這兩個功能都是被調用,但聊天窗口刷新之前聊天消息可以保存它們。

爲了解決這個問題,你應該只刷新一次新的消息已成功保存聊天窗口:正如你所看到

function refreshChat() { 
    // Removed for brevity 
} 

function sendMessage() { 
    var user2 = "'.$user2.'"; 
    var message = $("#message"); 
    if(message.val() != "" && message.val() != " ") { 
     $.get("'.$system->getDomain().'/ajax/sendMessage.php?id="+user2+"&msg="+encodeURIComponent(message.val()), function(data) { 
      $(".conversation-content").html(data); 
      message.val(""); 

      // Now, this will only be called once the ajax is complete 
      refreshChat(); 
     }); 
    } 
} 

$(document).keypress(function(e) { 
    if(e.which == 13) { 
     sendMessage(); 

     // I removed the refreshChat() call from here and moved it 
     // into the $.get() callback above ^^ 
    } 
}); 

,我搬到現在從jQuery $.get()內調用你的refreshChat()方法回電話。

+0

幾乎沒有...當我進入一個消息,它加載之前的消息,所以每次我進入一個消息的時候,前面的人會在屏幕 – Aurora

+0

我們已經加載那麼解決了最初的問題。很高興我能幫上忙。隨着你的後續問題,我建議在SO上創建一個新問題,並提供更多關於新問題的信息(比如你的php腳本和返回的數據),這樣我們可以更好地爲你提供幫助。 –

+0

或者,使用promise:'$ .get(...)。done(refreshChat);' – 4castle

0

您是否嘗試過使用回調函數,這可能是您需要的?

以下是供參考的鏈接。

http://www.impressivewebs.com/callback-functions-javascript/

+1

我不認爲它們的意思是平行的,因爲它們之後使用的措辭意味着它們希望它快速連續發生。 「在同一時間」,因爲它們應該在代碼中彼此相鄰。 – 4castle

+0

@ 4castle你是對的,它需要快速連續發生 – Aurora

+0

好吧,我編輯了答案,以避免進一步混淆Java腳本並列 – rojobo

0

我工作的AWNSER

考慮我問,我有顯着韋斯·福斯特的awnser是正確的。什麼使它對我來說也是在get函數之後應用一個promise。這樣,ajax腳本根據需要調用兩次。我希望它能幫助未來的人。 (看着我......穿越時空......)。你會發現下面我的代碼:

function refreshChat() { 
var id = "'.$convers_id.'"; 
var receiver = "'.$system->getFirstName($second_user->full_name).'"; 
$.get("'.$system->getDomain().'/ajax/refreshChat.php?id="+id+"&receiver="+receiver, function(data) { 
    $(".conversation-content").html(data); 
}); 
var scroller = $(".conversation-message-list").getNiceScroll(0); 
$(".conversation-message-list").getNiceScroll(0).doScrollTop($(".conversation-content").height(),-1); 
} 

function sendMessage() { 
    var user2 = "'.$user2.'"; 
    var message = $("#message"); 
    if(message.val() != "" && message.val() != " ") { 
     $.get("'.$system->getDomain().'/ajax/sendMessage.php?id="+user2+"&msg="+encodeURIComponent(message.val()), function(data) { 
      $(".conversation-content").html(data); 
      message.val(""); 


      refreshChat(); 
     }).done(refreshChat); 
} 
} 
$(document).keypress(function(e) { 
    if(e.which == 13) { 
     sendMessage(); 


    } 
});