jQueryajax,附加数据有效,但数据对另一端(计算机/用户)可见
jQuery ajax, appending data work but will the data be visible to other end(computer/user)?
整个项目和代码稍后将托管到php、mysql托管服务器。
代码:
$(document).ready(function(){
console.log('hello');
$('input[name="nm_submit_comment"]').on('click', function(e){
e.preventDefault();
var frm = $(this).closest("form");
var frm_id = frm.attr("id");
var frm_id_splitted = frm_id.split("_");
var frm_id_splitted_2 = frm_id_splitted[2];
var frm_serialized = frm.serialize();
$.ajax({
url: "save-comment.php",
method: "POST",
data: frm_serialized,
success: function(data) {
data = JSON.parse(data);
$('div#id_div_comment_' + frm_id_splitted_2).append('<div class="cl_div_comment_content">' + data.nm_textarea_comment_content + '</div>');
$('textarea.cl_textarea_comment_content').val("");
}
});
});
});
jQuery ajax运行良好。它将数据保存到数据库中,然后将数据附加到div中。我的问题是:附加数据后,数据对另一端(计算机/用户)是否可用/可见?或者,在添加数据后,我必须添加setInterval函数,每隔10秒加载一次注释div。因此,如果有人发表评论,那么10秒后,其他用户就会看到该评论。它加载所有评论可能会有开销div.
我们在facebook状态更新中看到了同样的情况。当有人更新他的状态或评论时,其他所有朋友都可以看到评论。我们在stackoverflow通知中看到了这样的例子。如果有人回答或评论,我们会立即收到通知。它是如何完成的?如何使数据对其他用户可见?
对这种情况的解释将不胜感激。
通过使用setInterval功能,所有用户必须每10秒重新加载一次注释部分,这是一种糟糕的做法,对服务器来说不是最好的设置。然而,这是最简单的解决方案。
最好的解决方案是套接字,当一个用户发表评论时,套接字会通知其他用户,反之亦然。在http://www.socket.io/.你必须创建一个应用程序,让所有用户都能收听指定的功能,如果一个用户发表了评论,其他用户将收到通知。这是解决这个问题的一种轻量级方法,因为只有当一个用户发表了评论(这会向函数发送信号)时,评论才会更新。
希望这能有所帮助。Cheers
您必须使用setInterval函数。您可以将版本号与数据库端的每个注释关联起来,而不是加载所有div元素。当注释更新时,您将增加版本号。因此,当setInterval到达后端并传递其versionId时,您可以根据版本差异确定并发送一个标志,该标志将告诉视图哪些div要更新,哪些不更新。
正如其他人所建议的,更好的做法是www.sockets.io,简单的做法是setInterval
。我只想补充几点,你可以考虑一下:
1) 你预计会有多少用户,如果你预计应用程序会有大量用户使用,甚至不用担心setInterval
2) 如果您需要少量用户使用该应用程序,并且您发现sockets.io很难实现(在第一次本地化时可能看起来很可怕),您可能会考虑下一种方法:
- 不用加载所有div,而是使用一个唯一的id或时间戳,每10秒只将其发送到服务器。如果服务器报告讨论中存在比唯一id更新的项目,则返回一条"确定"消息,可以评估该消息以下载新内容。通过这种方式,您可以使用"更简单"的setInterval方法,但也可以尽可能地限制服务器负载
如果用户数量较少,则setInterval可能会有所帮助。
不管怎样,每次开始检查时都必须销毁ajax事件。
setInterval(function(){
$check_for_new_chat.destroy();
$check_for_new_chat = $.ajax({
...
});
},10000);
通过这种方式,您可以减少服务器负载。
正如其他人所说,你最好使用WebSockets,但在这一点上,这也意味着你可以删除AJAX Post,因为你只需要使用WebSocket服务器为你处理该请求,然后将通知与消息内容一起发送给其他人。
需要注意的是,如果你的系统永远不会被使用,那么用户的数量,超过10个人会同意你关于必须使用SetInterval和AJAX的正确假设。
如果你预计有10个以上的用户经常使用WebSockets,原因很简单。WebSockets在打开页面时会有更多的客户端负载,因为AJAX在打开页面后只有10秒。如果你使用ASYNC,你的用户甚至不会注意到它
Web套接字有一点初始负载,因此根据套接字客户端的启动方式和时间,用户可能会注意到轻微的延迟。
使用AJAX,您还可以使用PHP SESSION系统来了解哪些用户使用WebSockets发布了什么内容。要验证谁发布了什么,并确保他们确实发布了内容,并且有人没有向您的WebSocket服务器发送垃圾信息,会有点困难。
因此,请了解您的人口统计数据,人们发表评论的可能性有多大,有多少用户将使用该系统——所有这些信息都与决策有关。
如果您确实选择走WebSockets路线,请确保您正确规划了安全性。例如,当用户加载一个页面时,在数据库中为websockets服务器保存一个令牌,并每隔1分钟让socket客户端保持该令牌有效,比如说保持2分钟。在删除过去过期的任何令牌之后,您可以通过crontab执行此操作,也可以通过页面加载执行此操作。
- 用程序搜索JQuery数据表中的文本
- 要求输入在数据列表中
- 正在将数据主题添加到所有项目
- 函数参数中的数据与指定变量之间的任何性能差异
- 在VanillaJS中模拟模型双向数据绑定
- CSS-如何定位内容数据标题
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 序列化数据属性中对象的最可靠方法
- 如何将JSON数据导入我的ejs模板
- 不显示带有本地json文件数据的谷歌地图脚本
- 如何将json数据显示为html
- 一台特定计算机的Ajax请求数据未定义/失败
- 来自本地计算机的数据
- 是否可以使用 PHP 或 JavaScript 或任何其他编程语言在客户端计算机中存储大约 1 MB 的数据
- jQueryajax,附加数据有效,但数据对另一端(计算机/用户)可见
- 将客户端数据发送到另一台计算机
- 将数据发送到外部服务器的PHP页面,并在本地计算机中从JavaScript加载内容
- 我们如何找到计算机规格的统计数据,以便我们知道我们的web应用程序的目标
- 使用socket.io在计算机之间(不一定在同一网络上)发送数据包的工作示例