Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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 mvc中数据的实时插入_Javascript_Jquery_Asp.net Mvc_Real Time - Fatal编程技术网

Javascript mvc中数据的实时插入

Javascript mvc中数据的实时插入,javascript,jquery,asp.net-mvc,real-time,Javascript,Jquery,Asp.net Mvc,Real Time,我有一个带有评论功能的新闻项目。任何添加评论的人都可以立即看到自己的评论,而无需重新加载页面(使用ajax)。问题是,当user1(例如)在post1上发表评论时,只有user1可以立即看到他的评论,但所有其他用户都需要重新加载页面才能看到user1的评论。我怎样才能解决这个问题 我用于获取注释的代码: $(function () { $("#AddComment").click(function () { var CommentText = document.getElementBy

我有一个带有评论功能的新闻项目。任何添加评论的人都可以立即看到自己的评论,而无需重新加载页面(使用ajax)。问题是,当user1(例如)在post1上发表评论时,只有user1可以立即看到他的评论,但所有其他用户都需要重新加载页面才能看到user1的评论。我怎样才能解决这个问题

我用于获取注释的代码:

$(function () {
  $("#AddComment").click(function () {

  var CommentText = document.getElementById("CommetForm").innerHTML;
    var UserName = document.getElementById("UserName").innerHTML;
    var PostId = document.getElementById("PostId").innerHTML;


       $.ajax({
                url: '/PostComment/AddComment',
                type: 'POST',
                dataType: 'json',
                cache: false,
                data: { "PostId": PostId, "CommentText": OrignalCommentText },
                success: function (data)
                {
                    if (data == "P") // Commet Stored on database successfully
                    {
                    document.getElementById("PostComments-" + PostId).innerHTML += 
                    "<li>" +
                                    "<div class='media'>" +
                                        "<div class='media-body'>" +
                                            "<a href='' class='comment-author'>"+UserName+"</a>" +
                                            "<span class='CommetText' id='CommentText-" + PostId + "'>" + CommentText + "</span>" +
                                        "</div>" +
                                    "</div>" +
                                "</li>";

                    }

                    else // Some Error occur during storing database
                    {

                        document.getElementById("CommentError-" + PostId).innerHTML = "\nSomething went wrog, please try agin";

                    }



                }
            });
});
});

我建议你用信号器来做这个

您可以编写一个JavaScript代码,对检查数据库更新的servlet进行ajax调用。
向ajax调用的成功函数返回一个标志,如果状态已更改或任何注释已添加到数据库中,则可以重新加载页面或用新注释刷新包含注释的页面。

它不会在其他页面上发布,因为user1页面正在进行ajax调用,因此它可以正确加载。但是,其他页面并不“知道”它们应该通过AJAX重新加载。您需要运行某种定时循环来检查任何更改。以上任何一个答案都应该适用

TL;DRUse可以使用
setInterval
或来完成此操作。下面我来解释一下

首先,我们需要了解这种发布/订阅模式的背后是什么。由于您希望构建实时应用程序,因此可以创建一个函数,询问服务器自上次检查以来是否添加了某些数据

使用WindowTimers.setInterval()

在我看来,这里是实现这一点的最简单方法,假设这是您第一次使用WebSocket,并且您以前从未使用过WebSocket。例如,在客户端项目中,您在setInterval
setInterval(checkNewData,time)
中创建了一个函数。您的方法
checkNewData()
将向服务器发出ajax请求,询问是否最近添加了一些数据:

function checkNewData() {
    // ajax call   
    // On response, if found some new comment, you will inject it in the DOM
}
然后,在服务器端方法中,获取其调用的时间戳,并在数据库中验证是否存在一些数据。大概是这样的:

// Method written in PHP
public function ajax_checkNewData() {
    $time = time();

    // Asks to your model controller if has something new for us.
    // SELECT comment FROM comments WHERE timestamp > $time
    // Then return its response
}
您将使用来自控制器方法
ajax\u checkNewData()
的响应在
注释容器上写入

使用WebSocket(美丽的方式)

现在,还有另一种方法,使用WebSocket。HTML5WebSocket代表了web通信历史上的第一次重大升级。在WebSocket之前,web客户端和服务器之间的所有通信都只依赖于HTTP。现在,动态数据可以在WebSocket连接上自由流动,这些连接具有持久性(始终打开)、全双工(同时双向)和惊人的速度。在不同的库和框架中,您可以使用。我相信这将很好地解决您的实时应用程序问题,但我不确定您需要更改多少项目以适应此解决方案

查看简单聊天教程,看看它是否适合您的需要。它非常简洁,使用它来实现将是一个很好的挑战。由于它是事件驱动的,我相信您在实现它时不会遇到问题

有关更多信息,请查看:

参考资料

开始:聊天应用程序-

网袋-

网袋-


祝你好运

您可以使用SignalR实现此目的,您可以向服务器发送实时消息,下面是一个示例,了解如何在ASP.NET MVC中实现SignalR


感谢您的重播,但我认为signalr是一个很好的解决方案,但要了解更多有关实时的信息,signalr是最佳还是WebSocket?signalr使用WebSocket传输来发挥其神奇作用。因此,由于您在项目中使用ASP.NET,SignalR最适合您的实时应用程序。如果你对此感到好奇,你可以检查一下,或者我感谢你的帮助。非常感谢。谢谢你的回答,但是如果有很多用户在同一篇帖子上发表评论,定时循环或任何形式的轮询都会耗尽服务器。谢谢,我认为你的解决方案会解决我的问题。肯定是首选的方式
// Method written in PHP
public function ajax_checkNewData() {
    $time = time();

    // Asks to your model controller if has something new for us.
    // SELECT comment FROM comments WHERE timestamp > $time
    // Then return its response
}