簡體   English   中英

使用jquery從ajax獲取php數據而不使用ajax

[英]Getting php data from database using jquery without ajax

我正在開發一個支持PHP的查詢聊天,目前我正在使用ajax從服務器中提取數據並將其顯示在聊天室中,但這會使用多個ajax請求到客戶端計算機,這會導致它減慢速度....

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

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

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

然后我正在使用

windows.setInterval(getdata(),1000);

有沒有更好的方法來獲取這個子數據而不使用ajax和jquery

我已經檢查了這個鏈接,但它不是很有幫助

你可以使用socket.io或websockets api這是ajax的替代選項,所以,通過使用socket.io,jquery,php或nodejs,可以在不使用ajax的情況下建立一對一的私人聊天,以下鏈接將幫助你如何建立私人聊天。

socket.io

的WebSockets

私人聊天參考1

私人聊天參考2

更好的方法是使用nodejs而不是php 您可以查看此鏈接,以獲得可以使用的非常好的聊天實現。 雖然php chat有你提到的性能問題,但nodejs並不是因為當有東西需要推送時,它不會輪詢消息而是將它們推送到客戶端。 此外,您還可以立即使用現成的解決方案(當然您必須對其進行修改),這將節省您的開發時間。

但是,如果您仍然想要使用php方式,那么您有以下選項:

  • jquery + ajax(就像你現在正在做的那樣)
  • php套接字 - 這是一個使用websockets進行php聊天的例子https://www.sanwebe.com/2013/05/chat-using-websocket-php-socket 這種方法有其優點和缺點。 其中一個主要缺點是舊瀏覽器不支持,可能是設置過程並不那么容易。 但我更喜歡它而不是ajax請求。

你提到從數據庫中獲取數據,但有人可能會說,為了聊天應用程序的目的,數據庫是偶然的。 也許你想存儲聊天記錄,數據庫是一個自然的地方,但主要功能是傳輸消息。 所以你使用數據庫作為某種消息緩沖區。

正如其他人所提到的,Websockets似乎是最好的選擇。 如果你想要PHP服務器端,除了你的問題評論中提到的Kraken框架,你可以看一下Ratchet庫 他們在他們的網站上有一個簡單聊天的教程: http//socketo.me/docs/hello-world

基本上,您需要另一個服務器端進程(除了您的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) {
    //
}

你可以做一個技巧,假設數據不是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);
}

沒有任何合理的方法。 你必須以某種方式帶來新數據嗎? 要做到這一點的方法是重新加載頁面或通過Javascript / Ajax來避免重新加載。

您可以將更新設置為單面,以便當人員A寫入人員B時,將對新消息的提交執行請求。 這意味着除非發送一條消息,否則不會檢索新消息。 (不實用)

另一種方法是在某個地方注明最后一個消息時間,你可以反復檢查。 如果時間發生變化,您可以獲取新數據,但這不會確定請求數量......只會傳輸數據量。

我建議你看一下json / php中數據的大小。 您是否進行過測試以了解測試時間或性能如何?

我可以向您推薦這篇文章 ,如果你喜歡它是使用非jQuery的請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM