Javascript 在不使用ajax的情况下使用jquery从数据库获取php数据
我正在开发一个支持PHP的查询聊天,目前我正在使用ajax从服务器中提取数据并将其显示在聊天盒中,但这利用了对客户端计算机的多个ajax请求,这导致它的速度变慢 这就是我使用ajax和yii2所做的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
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请求
您可以做一个技巧,假设数据不是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逻辑中实现它。这是一个界限。您应该扩展您的答案,在此处包含尽可能多的信息,并使用该链接仅供参考。