Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.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 在不使用ajax的情况下使用jquery从数据库获取php数据_Javascript_Php_Jquery_Ajax - Fatal编程技术网

Javascript 在不使用ajax的情况下使用jquery从数据库获取php数据

Javascript 在不使用ajax的情况下使用jquery从数据库获取php数据,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我正在开发一个支持PHP的查询聊天,目前我正在使用ajax从服务器中提取数据并将其显示在聊天盒中,但这利用了对客户端计算机的多个ajax请求,这导致它的速度变慢 这就是我使用ajax和yii2所做的 function getdata() { $.get("controller/action"). done(function(){ //process json $("#chatbox").html(data); }) } 那我用 wi

我正在开发一个支持PHP的查询聊天,目前我正在使用ajax从服务器中提取数据并将其显示在聊天盒中,但这利用了对客户端计算机的多个ajax请求,这导致它的速度变慢

这就是我使用ajax和yii2所做的

 function getdata() {
    $.get("controller/action").
    done(function(){
       //process json

        $("#chatbox").html(data);
    })
  }
那我用

windows.setInterval(getdata(),1000);
有没有更好的方法不使用ajax和jquery来获取这些子数据


我已经查过了,但是没有什么有用的方法。你必须以某种方式引入新数据,对吗? 实现这一点的方法是通过重新加载页面或通过Javascript/Ajax避免重新加载

您可以将更新设置为单面更新,以便在人员A向人员B写入信息时,在提交新消息时执行请求。这意味着除非发送新消息,否则不会检索新消息。(不实用)

另一种方法是在某个地方单独记录最后一条消息的时间,您可以反复检查。 如果时间发生变化,那么您可以获取新数据,但这不会固定请求的数量。。。仅传输的数据量

我建议您查看json/php中数据的大小。您是否运行过测试以查看这需要多长时间或它的性能如何


如果您愿意,我可以向您推荐使用非jquery请求的

更好的方法是使用
nodejs
而不是
php
。你可以查看这个链接,找到一个非常好的聊天工具,你可以使用它。 虽然php聊天有您提到的性能问题,但nodejs没有,因为当有东西要推送时,它会将消息推送到客户端,而不是轮询消息。您还可以直接收到现成的解决方案(当然您必须修改它),这将节省您的开发时间

但是,如果您仍然希望采用php方式,那么您有以下选项:

  • jquery+ajax(就像您现在正在做的那样)
  • php套接字-下面是一个使用websockets的php聊天示例。这种方法有其优缺点。其中一个主要的缺点是旧浏览器不支持这一点,可能是安装过程并不容易。但是我更喜欢它而不是ajax请求

您可以使用socket.io或websockets api,这是ajax的替代选项,因此,通过使用socket.io、jquery、php或nodejs,您可以在不使用ajax的情况下构建一对一的私人聊天,以下链接将帮助您了解如何构建私人聊天


您可以做一个技巧,假设数据不是json,而是声明单个变量的javascript文件,现在您必须将其添加到文档中,例如

下面是您的data.php(由php生成的javascript)

在php中

echo 'var x = {"name":"Anshuman"}'
在javascript中

  var s = document.createElement( 'script' );
  s.setAttribute( 'src', 'data.php');
  s.onload=callback;
  document.body.appendChild( s );
function callback(){
console.log(x);
}

您提到了从数据库获取数据,但有人可能会说,对于聊天应用程序来说,数据库是偶然的。也许您想存储聊天历史记录,而数据库是存储聊天历史记录的自然场所,但主要功能是传输消息。因此,您使用数据库作为某种消息缓冲区

正如其他人所提到的,WebSocket似乎是最好的选择。如果您想要PHP服务器端,除了在对您的问题的评论中提到的Kraken框架之外,您还可以查看。他们的网站上有一个简单聊天的教程:

基本上,您需要另一个服务器端进程(除了Web服务器)来接收和广播聊天消息。根据该教程,在
Chat
类的
onMessage
方法中,如果需要,您可以在数据库中进行插入,最好是异步插入

客户端,您需要使用Javascript连接到websocket。简单的例子:

var conn = new WebSocket('ws://localhost:8080');

conn.onopen = function(e) {
    console.log("Connection established!");
};

conn.onmessage = function(e) {
    console.log('Message received: ' + e.data);
    addMessageToChatbox(e.data);
};

$('#yourChatInput').keypress(function(e) {
    if(e.which == 13) { // "enter" was pressed
        conn.send($(this).val());
        $(this).val('');
    }
});

function addMessageToChatbox(message) {
    //
}

父亲数据…你应该使用什么进一步的数据#mahi…呢。你也可以看看这个PHP项目及其演示。加载数据需要很短的时间,但客户端用户在windows pc上使用google chrome,当我检查任务管理器并启动聊天应用程序时,它使用了很多内存,回顾google chrome的网络标签,有很多请求正在发生,这就是为什么我担心是否还有其他选项,即使不是jquery,而是返回Json数据示例当添加新注释时堆栈溢出如何工作有一个自动重新加载,但没有很多ajax请求这是真的,但是,除非重新加载页面,否则不会通知您新的注释。你可以少提要求,如果不需要,也可以不提。我想您需要指定更新的重要性。我猜你想要新消息的实时更新。如果是这种情况,你需要检查他们,没有其他办法。如果没有,那么您只需在页面加载时进行检查。最坏的情况下,检查可以通过“检查新消息”按钮或在聊天室的焦点上完成。你知道stackoverflow在通知中使用了什么技术吗。。。。据我所知,这些网页上没有实时更新。。。仅在页面加载时。如果这就是你想要的,那么这很容易。我的聊天应用程序涉及私人聊天。这是否可能与websocketsYes一起实现,你将在你的后端php逻辑中实现它。这是一个界限。您应该扩展您的答案,在此处包含尽可能多的信息,并使用该链接仅供参考。