2017-05-27 48 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

相关问题