【问题标题】:Getting php data from database using jquery without ajax使用没有ajax的jquery从数据库中获取php数据
【发布时间】:2017-03-04 22:27:41
【问题描述】:

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

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

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

        $("#chatbox").html(data);
    })
  }

然后我正在使用

windows.setInterval(getdata(),1000);

有没有更好的方法在不使用 ajax 和 jquery 的情况下获取这个子数据

我已经检查了This link,但它不是很有帮助

【问题讨论】:

标签: javascript php jquery ajax


【解决方案1】:

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

socket.io

WebSockets

Private chat reference 1

Private chat reference 2

【讨论】:

  • 这是边界线link-only answer。您应该在此处扩展您的答案以包含尽可能多的信息,并仅将链接用作参考。
【解决方案2】:

更好的方法是使用nodejs 而不是php。您可以查看此链接以获得可以使用的非常好的聊天实现。 虽然 php chat 有你提到的性能问题,但 nodejs 没有,因为它不是轮询消息,而是在有东西要推送时将它们推送到客户端。此外,您还会收到开箱即用的解决方案(当然您必须对其进行修改),这将节省您的开发时间。

但是如果你还是想走php的方式,那么你有这些选择:

  • jquery + ajax(就像你现在正在做的那样)
  • php 套接字 - 这是一个使用 websockets https://www.sanwebe.com/2013/05/chat-using-websocket-php-socket 的 php 聊天示例。这种方法有其优点和缺点。主要缺点之一是旧浏览器不支持,并且可能设置过程并不那么容易。但我更喜欢它而不是 ajax 请求。

【讨论】:

  • 我的聊天应用程序涉及私人聊天,这可以通过 websockets 实现吗
  • 是的,您将在后端 php 逻辑中实现它。
【解决方案3】:

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

正如其他人所提到的,Websockets 似乎是最好的选择。如果您想要 PHP 服务器端,除了问题评论中提到的 Kraken 框架外,您还可以查看Ratchet library。他们的网站上有一个简单聊天的教程:http://socketo.me/docs/hello-world

基本上,您需要另一个服务器端进程(除了您的网络服务器)来接收和广播聊天消息。按照该教程,在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) {
    //
}

【讨论】:

    【解决方案4】:

    您可以做一个技巧,假设数据不是 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);
    }
    

    【讨论】:

      【解决方案5】:

      没有任何明智的方法。您必须以某种方式引入新数据,对吗? 这样做的方法是重新加载页面或通过 Javascript/Ajax 来避免重新加载。

      您可以在一侧进行更新,以便当人 A 写信给人 B 时,请求会在提交新消息时执行。这意味着除非发送新消息,否则不会检索到新消息。 (不实用)

      另一种方法是在某处自行记录最后一条消息时间,您可以反复检查。 如果该时间发生变化,您可以获取新数据,但这不会解决请求的数量......只有正在传输的数据量。

      我建议你从 json/php 中查看数据的大小。您是否进行过测试以了解这需要多长时间或效果如何?

      如果您愿意,我可以将您推荐给使用非 jquery 请求的this post

      【讨论】:

      • 数据需要很短的时间才能加载,但客户端用户在 Windows pc 上使用谷歌浏览器,当我检查任务管理器并启动聊天应用程序时,它使用了很多内存,回顾谷歌浏览器的网络选项卡发生了很多请求,这就是为什么即使不是 jquery 而是返回 Json 数据也会担心是否还有其他选项
      • 添加新评论时堆栈溢出如何工作的示例存在自动重新加载但没有太多 ajax 请求
      • 是的,这是真的,但是除非您重新加载页面,否则您不会收到新评论的通知。如果您不需要,您可以发出较少的请求或不发出请求。我想您需要指定更新的重要性。我想您想要实时更新新消息。如果是这种情况,您需要检查它们,没有其他方法。如果没有,那么您只会导致检查页面加载。在最坏的情况下,可以通过“检查新消息”按钮或聊天框的焦点来完成检查
      • 你能知道 stackoverflow 使用什么技术来通知它
      • 再次......据我所知,这些页面上没有实时更新......仅在页面加载时。如果这就是你所追求的,那很容易
      猜你喜欢
      • 2014-05-03
      • 2021-04-01
      • 1970-01-01
      • 2019-11-26
      • 2014-10-17
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多