2017-05-27 38 views
1
$scope.receivefb = function receivefb(){ 
    var url ="js/db.php"; 
    $http.post(url).success(
     function(data){ 
     console.log(data); 
     if(data.msg!=""){ 
    document.getElementById('messages').innerHTML += '<div class="row message-body"><div class="col-sm-12 message-main-receiver"><div class="receiver"><div class="message-text" name="messaggio" id='+data.id+'>'+data.msg+'</div><span class="message-time pull-right">Sun</span></div></div></div>'; 

      } 
      $timeout($scope.receivefb, 2000); 

     }) 


} 

我使用這個JavaScript函數每2秒調用PHP腳本,從數據庫中獲取的最後一條消息,然後我打印出來。我不想使用這個超時事件,而是我想使用一種總是監聽的腳本,並且每次檢測到新消息時觸發我的javascript。 這個概念很簡單,但我不知道如何解決這個問題。拉從服務器的消息,並呈現在客戶方

+2

[WebSockets的](https://developer.mozilla.org/en-US/docs/Web/API/WebSocke ts_API)。 – Siguza

回答

1

事實上,如果您沒有向服務器發送請求,或者服務器通過某些網絡套接字或「網絡套接字」技術通知客戶端,您就無法檢測是否有新消息。

至少有2級的解決方案:

1)使用開發socket.io服務器端web的插座應用,結合一些消息事件,並把新的消息到$scope.messages陣列,委託再現邏輯以角。優點是它基於事件並且具有「實時性」,缺點是你必須學習nodejs並擁有nodejs服務器(簡單廉價的燈服務器託管可能沒有nodejs支持)。

2)或只是簡單地分別從呈現邏輯保持輪詢消息每2秒,並把新的消息到$scope.messages,委託再現邏輯以角度(觀看ng-repeat tutorials):

JS部分(內側的MessagesController):

$scope.messages = []; 
function receivefb(scope) { 
    var url ="js/db.php"; 
    $http 
    .post(url) 
    .success(function(data) { 
     if(response.msg != '') { 
     scope.messages.push(data); 
     } 
    }) 
    .finally(function() { 
     (function(method, scope) { 
     setTimeout(function(){ 
      method(scope); 
     }, 2000) 
    )(receivefb, scope); 
    }); 
} 
receivefb($scope); 

HTML部分:

<div ng-controller="MessagesController"> 

    <div ng-repeat="message in messages" class="row message-body"> 
    <div class="col-sm-12 message-main-receiver"> 
     <div class="receiver"> 
     <div class="message-text" name="messaggio" id="{{message.id}}"> 
      {{message.msg}} 
     </div> 
     <span class="message-time pull-right">Sun</span> 
     </div> 
    </div> 
    </div> 

</div> 
+0

正如@Siguza在問題的評論部分簡要指出的,你可以使用websockets。輪詢不是一個很好的解決方案。 「WebSockets是一項先進的技術,可以在用戶的​​瀏覽器和服務器之間打開交互式通信會話,使用此API,您可以將消息發送到服務器並接收事件驅動的響應,而無需輪詢服務器以進行回覆。「 – stevenvanc

+0

@stevenvanc好像你沒有仔細閱讀我的答案,參見(1)。在我的答案中,我給出了2個解決方案:第一個情況是如果開發人員完全控制服務器,他可以安裝nodejs,客戶有便宜的5美元/月的主機,其中有whm,cpanel,php,mysql等。 – num8er

+0

「實際上,如果您沒有向服務器發送請求,則無法檢測是否有新消息。」 - 這是您的文本top and point 2. Info under 1. I agree。 – stevenvanc

相關問題