javascript - 从服务器拉取消息并在客户端渲染

标签 javascript php

$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的脚本。 这个概念很简单,但我不知道如何解决这个问题。

最佳答案

事实上,如果您不向服务器发出请求,或者服务器通过某种网络套接字或“类似网络套接字”技术通知客户端,您将无法检测到是否有新消息。

至少有两种解决方案:

1) 使用socket.io开发服务器端Web-socket应用程序,绑定(bind)到一些消息事件并将新消息放入$scope.messages数组,将渲染逻辑委托(delegate)给Angular。优点是它基于事件工作并且具有“实时性”,缺点是你必须学习nodejs并拥有nodejs服务器(简单的廉价灯服务器托管可能没有nodejs支持)。

2) 或者只是每 2 秒轮询一次消息,与渲染逻辑分开,并将新消息放入 $scope.messages,将渲染逻辑委托(delegate)给 Angular(观看 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>

关于javascript - 从服务器拉取消息并在客户端渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44216554/

相关文章:

PHP - 将下拉框保存到我的 mysql 数据库中

javascript - BST 日期字符串到 javascript 日期

javascript - Google Maps V3 不会删除事件监听器

php - 在angularjs中减去日期

php - HTTP_ORIGIN 的安全性如何?

php - 从android发送数据到php,php存储一个序列?在mysql中

php - 确定用于 Kohana 的当前 Controller

javascript - HTML5 Audio,获取钢琴音色

javascript - 如何从字符串中获取一组单词?

javascript - 如何检查字符串是否包含子字符串并在 javascript 中为其着色?