0

当我更新数据库时,我想从服务器向客户端推送通知。
这是我的控制器:

public function finish() {
    $this->autoRender = false;
    try {
        if($this->request->is('post')) {          
            $db = $this->ClientCabaInfo->getDataSource();
            if($this->Session->check('client_check_data')) {
                $data = $this->Session->read('client_check_data');
                ...
                if($this->CabaInfo->save()) {
                    $this->webNotify();
                }
            }

            $this->redirect('index');
        }

    } catch (Exception $e) {
        $this->EasyLog->log(Conf::r("APP.LOG.APP_FILE"),$e->getMessage(),Conf::r("COM.LOG.FORMAT_ERROR"),'NASUCT');
        $this->redirect("/errors/");
    }

}
public function webNotify() {
    header('Content-Type: text/event-stream');
    header('Cache-Control: no-cache');

    $time = date('r');
    echo "data: {$time}";
    flush();

}

在我看来,我打电话给:

if(typeof(EventSource)!=="undefined")
  {

  var source=new EventSource("<?php echo $this->Html->url('/client_caba/finish'); ?>");
  source.onmessage=function(event)
    {
        notifyMe(event.data);
    };
  }
else
  {
  document.getElementById("result").innerHTML="Sorry, your browser does not support server-sent events...";
  }

但是当我访问页面时:http://localhost:8080/admin/client_caba/finish
它显示一个对话框并且没有完成操作...... 在此处输入图像描述

我哪里错了?请告诉我如何解决这个问题并将参数传递给弹出通知......谢谢

4

1 回答 1

0

您使用的是哪个浏览器?显然,如果您看到已发布的对话框,则意味着一切正常,并且您实际上正在接收来自服务器的响应。对我来说,这似乎是一个浏览器问题。最新的浏览器版本(如 chrome)需要明确的权限才能显示桌面通知。请在 chrome 中尝试您的代码,并注意一个小的弹出通知,要求您允许显示来自您网站的通知。一旦你允许,事情应该可以正常工作。如果有任何问题,请分享 notifyMe() 函数的代码,因为这可能会有一些不一致。

于 2014-10-02T04:26:12.787 回答