Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.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 jqueryajax,附加数据工作,但数据对另一端(计算机/用户)可见吗?_Javascript_Php_Jquery_Html_Ajax - Fatal编程技术网

Javascript jqueryajax,附加数据工作,但数据对另一端(计算机/用户)可见吗?

Javascript jqueryajax,附加数据工作,但数据对另一端(计算机/用户)可见吗?,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,整个项目和代码将在稍后托管到php、mysql托管服务器 代码: $(文档).ready(函数(){ log('hello'); $('input[name=“nm_submit_comment”]”)。在('click',函数(e)上{ e、 预防默认值(); var frm=$(此); var frm_id=frm.attr(“id”); var frm_id_splited=frm_id.split(“”); var frm_id_splitted_2=frm_id_splitted[2]

整个项目和代码将在稍后托管到php、mysql托管服务器

代码:

$(文档).ready(函数(){
log('hello');
$('input[name=“nm_submit_comment”]”)。在('click',函数(e)上{
e、 预防默认值();
var frm=$(此);
var frm_id=frm.attr(“id”);
var frm_id_splited=frm_id.split(“”);
var frm_id_splitted_2=frm_id_splitted[2];
var frm_serialized=frm.serialize();
$.ajax({
url:“save comment.php”,
方法:“张贴”,
数据:frm_已序列化,
成功:函数(数据){
data=JSON.parse(数据);
$('div#id(div)comment(注释))+frm(id)splitted(注释)2.append(''+data.nm)textarea(注释)内容+'');
$('textarea.cl_textarea_comment_content').val(“”);
}
});
});
});
jQueryAjax运行良好。它将数据保存到数据库,然后将数据附加到div。我的问题是:附加数据后,数据是否对另一端(计算机/用户)可用/可见?或者在添加数据之后,我必须添加set setInterval函数,以便每10秒加载一次注释div。因此,如果有人发表评论,那么在10秒后,其他用户将可以看到该评论。信息技术 可能有加载所有注释div的开销

我们看到了facebook状态更新的相同场景。当某人更新他的状态或评论时,其他所有朋友都可以看到评论。我们在stackoverflow通知中看到了这样的例子。如果有人回答或评论,我们会立即得到通知。怎么做的?如何使数据对其他用户可见


非常感谢您对该场景的解释。

您必须使用setInterval函数。您可以将版本号与数据库端的每个注释相关联,而不是加载所有div元素。更新注释时,您将增加版本号。因此,当setInterval到达后端并传递其版本ID时,您可以根据版本差异确定并发送一个标志,该标志将告诉视图哪些div需要更新,哪些div需要保留。

通过使用setInterval函数,所有用户必须每10秒重新加载一次注释部分,这是一种不好的做法,不是服务器的最佳设置。然而,这是最简单的解决办法

最好的解决方案是套接字,当一个用户发表评论时,套接字会通知其他用户,反之亦然。抢掠。您必须创建一个应用程序,其中所有用户都收听指定的功能,如果一个用户发表了评论,则会通知其他用户。这是解决此问题的一种轻量级方法,因为只有一个用户发表了评论(向函数发送信号),才会更新评论


希望这有帮助。欢呼声

正如其他人所建议的那样,更好的练习将是,最简单的练习将是
setInterval
。我只想补充几点,你可以考虑:

1) 你期望有多少用户,如果你期望该应用程序被大量用户使用,甚至不用担心setInterval

2)如果您需要少量用户的应用程序,并且找到SokKest.IO来硬实现(可以在第一次OcAcess上看起来吓人),那么您可以考虑下一种方法:

  • 不要加载所有div,而是使用唯一的id或时间戳,每10秒只将其发送到服务器。如果服务器报告讨论中有比唯一id更新的项目,则返回“确定”消息,可对其进行评估以下载新内容。通过这种方式,您可以使用“更简单”的setInterval方法,同时尽可能地限制服务器负载

如果用户数量较少,设置间隔可能会有所帮助

无论如何,每次开始检查时都必须销毁ajax事件

setInterval(function(){
  $check_for_new_chat.destroy();
  $check_for_new_chat = $.ajax({
  ...
 });
},10000);

通过这种方式,您可以减少服务器负载。

正如其他人所说,您最好使用WebSocket,但在此说明中,这也意味着您可以删除AJAX帖子,因为您只需使用WebSocket服务器为您处理该请求,然后将通知与消息内容一起发送给其他人

需要注意的是,如果您的系统永远不会被用户使用,那么超过10个人会同意您关于必须使用SetInterval和AJAX的正确假设

如果您希望超过10个用户经常使用WebSocket,那么原因很简单,WebSocket在打开页面时会增加客户端负载,因为AJAX在打开页面后仅需10秒。如果您使用ASYNC,您的用户甚至不会注意到它

Web套接字有一点初始负载,因此根据启动套接字客户端的方式和时间,用户可能会注意到轻微的延迟

使用AJAX,您还可以使用PHP会话系统来了解用户发布了哪些内容。使用WebSocket,验证谁发布了哪些内容、确保他们发布了哪些内容以及有人没有向您的WebSocket服务器发送垃圾信息会有点困难

因此,了解您的人口统计信息人们发表评论的可能性有多大,有多少用户将使用此系统所有这些信息都与决策相关


如果您选择了WebSockets路线,请确保您正确规划了安全性。例如,当用户加载一个页面时,在数据库中为web套接字服务器保存一个令牌,并且每1分钟让套接字客户端保持该令牌的活动状态(例如2分钟)。在删除过去过期的任何令牌之后,您可以通过crontab执行此操作,也可以通过页面加载执行此操作,这取决于您。

这些操作通过
sockets
完成,以提供实时数据更新。没有socket,您只能使用
ajax
,但它会在调用服务时增加服务器的负载
setInterval(function(){
  $check_for_new_chat.destroy();
  $check_for_new_chat = $.ajax({
  ...
 });
},10000);