Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在另一个函数完成后立即启动该函数?_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 如何在另一个函数完成后立即启动该函数?

Javascript 如何在另一个函数完成后立即启动该函数?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有以下代码: <script> function refreshChat() { var id = "'.$convers_id.'"; var receiver = "'.$system->getFirstName($second_user->full_name).'"; $.get("'.$system->getDomain().'/ajax/refreshChat.php?id="+id+"&receiver="+receiv

我有以下代码:

<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(){
var id=“”.$convers_id.”;
var receiver=“”.$system->getFirstName($second_user->full_name)。”;
$.get(“'.$system->getDomain()。/ajax/refreshChat.php?id=“+id+”&receiver=“+receiver,函数(数据){
$(“.conversation content”).html(数据);
});
var scroller=$(“.conversation message list”).getnicesroll(0);
$(“.conversation message list”).GetNiceSoll(0.doScrollTop($(“.conversation content”).height(),-1);
}
setInterval(函数(){
refreshChat();
}, 2000);
函数sendMessage(){
var user2=“”.$user2.”;
var message=$(“#message”);
if(message.val()!=“”&message.val()!=“”){
$.get(“'.$system->getDomain()”/ajax/sendMessage.php?id=“+user2+”&msg=“+encodeURIComponent(message.val()),函数(数据){
$(“.conversation content”).html(数据);
message.val(“”);
});
}
}
$(文档)。按键(功能(e){
如果(e.which==13){
sendMessage();
}
});
现在,refreshChat函数每2秒调用一个ajax脚本。当您输入一条消息并按enter键时,它将调用另一个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>

函数refreshChat(){
var id=“”.$convers_id.”;
var receiver=“”.$system->getFirstName($second_user->full_name)。”;
$.get(“'.$system->getDomain()。/ajax/refreshChat.php?id=“+id+”&receiver=“+receiver,函数(数据){
$(“.conversation content”).html(数据);
});
var scroller=$(“.conversation message list”).getnicesroll(0);
$(“.conversation message list”).GetNiceSoll(0.doScrollTop($(“.conversation content”).height(),-1);
}
函数sendMessage(){
var user2=“”.$user2.”;
var message=$(“#message”);
if(message.val()!=“”&message.val()!=“”){
$.get(“'.$system->getDomain()”/ajax/sendMessage.php?id=“+user2+”&msg=“+encodeURIComponent(message.val()),函数(数据){
$(“.conversation content”).html(数据);
message.val(“”);
});
}
}
$(文档)。按键(功能(e){
如果(e.which==13){
sendMessage();refreshChat();
}
});

但这只会首先输入消息,并且只会在第二次按键(enter)时刷新。我想先感谢所有帮助我的人。

这实际上是一种错觉。这两个功能都被调用,但在聊天信息能够保存它们之前,聊天窗口正在刷新

要解决此问题,您应仅在成功保存新消息后刷新聊天窗口:

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 ^^
    }
});

如您所见,我将您的
refreshChat()
方法移动到现在从jQuery
$.get()回调中调用。

这实际上是一种错觉。这两个功能都被调用,但在聊天信息能够保存它们之前,聊天窗口正在刷新

要解决此问题,您应仅在成功保存新消息后刷新聊天窗口:

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 ^^
    }
});

如您所见,我将您的
refreshChat()
方法移动到现在从jQuery
$.get()回调中调用。

您是否尝试过使用回调,这可能是您需要的

这里有一个链接供参考


您是否尝试过使用回调,这可能是您所需要的

这里有一个链接供参考


我的工作

考虑到我的要求,我已将韦斯·福斯特的《阿恩瑟》标记为正确。使它对我起作用的还有在get函数之后应用承诺。这样,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();


    }
});

我的工作伙伴

考虑到我的要求,我已将韦斯·福斯特的《阿恩瑟》标记为正确。使它对我起作用的还有在get函数之后应用承诺。这样,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();


    }
});

我不认为他们的意思是平行的,因为他们后来使用的措辞意味着他们希望它能很快连续发生。“同时”,因为它们在代码中应该相邻。@4如果你是对的,它需要快速连续发生好的,我编辑了答案以避免进一步混淆java脚本是并行的,我不认为它们是并行的,因为他们后来使用的措词暗示他们希望它能很快连续发生。“同时”,因为它们在代码中应该相邻。@4如果你是对的,它需要快速连续发生好的,我已经编辑了答案,以避免进一步混淆java脚本几乎是并行的。。。当我输入一条消息时,它会加载上一条消息,因此每次我输入一条消息时,上一条消息就会加载到屏幕中。我们已经解决了最初的问题,然后。很高兴我能帮忙。对于您的后续问题,我建议您在SO上创建一个新问题,并提供针对新问题的更多信息(例如您的php脚本和返回的
数据
),以便我们能够更好地帮助您。或者,使用承诺:
$.get(…).done(refreshChat)您编辑的脚本无法工作。您的第一个脚本工作得最好,但它并没有解决问题…@Aurora我在最新编辑中所做的只是为了简洁起见删除了
refreshChat
函数的内容。您是否在最终脚本中删除了该代码?我在这里教你代码,帮助解决你的问题,而不是为你写具体的代码。几乎就在那里。。。当我输入消息时,它会加载p