2016-06-08 39 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(); 


    } 
});