Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 推送事件被触发两次_Javascript_Php_Events_Publish Subscribe_Pusher - Fatal编程技术网

Javascript 推送事件被触发两次

Javascript 推送事件被触发两次,javascript,php,events,publish-subscribe,pusher,Javascript,Php,Events,Publish Subscribe,Pusher,我使用Pusher(Pusher.com)在管理员发送通知时触发对所有登录客户端的通知 出于某种原因,这一事件发生了两次,尽管我只触发了一次 客户端订阅代码: var handleToastrListener = function() { var pusher = new Pusher("913284db62a0cc237db4"); var channel = pusher.subscribe('toastr-channel'); channel.

我使用Pusher(Pusher.com)在管理员发送通知时触发对所有登录客户端的通知

出于某种原因,这一事件发生了两次,尽管我只触发了一次

客户端订阅代码:

var handleToastrListener = function() {

     var pusher = new Pusher("913284db62a0cc237db4");
     var channel = pusher.subscribe('toastr-channel');

           channel.bind('new-toast', function(data) {

            toastr.options = data.options;
            var $toast = toastr[data.scf](data.msg, data.title);

           return true;

           });  
   }

       handleToastrListener();
服务器端发布代码(使用pusher包的PHP):

Pusher调试控制台显示只收到一条消息

但是,pusher js Javascript日志显示两条消息:

Pusher : Event recd : {"event":"new-toast","data":{"options":{"positionClass":"toast-top-right","onclick":"","showDuration":"1000","hideDuration":"1000","timeOut":"5000","extendedTimeOut":"1000","showEasing":"swing","hideEasing":"linear","showMethod":"fadeIn","hideMethod":"fadeOut"},"title":"Toastr Notifications","msg":"Gnome & Growl type non-blocking notifications","scf":"success"},"channel":"toastr-channel"} app.js:143
Pusher : Event recd : {"event":"new-toast","data":{"options":{"positionClass":"toast-top-right","onclick":"","showDuration":"1000","hideDuration":"1000","timeOut":"5000","extendedTimeOut":"1000","showEasing":"swing","hideEasing":"linear","showMethod":"fadeIn","hideMethod":"fadeOut"},"title":"Toastr Notifications","msg":"Gnome & Growl type non-blocking notifications","scf":"success"},"channel":"toastr-channel"}
进一步查看,我发现订阅发生了两次,尽管我只调用了一次:

Pusher : Event sent : {"event":"pusher:subscribe","data":{"channel":"toastr-channel"}} app.js:143
Pusher : Event recd : {"event":"pusher_internal:subscription_succeeded","data":{},"channel":"toastr-channel"} app.js:143
Pusher : No callbacks on toastr-channel for pusher:subscription_succeeded app.js:143
Pusher : State changed : connecting -> connected app.js:143
Pusher : Event sent : {"event":"pusher:subscribe","data":{"channel":"toastr-channel"}} app.js:143
Pusher : Event recd : {"event":"pusher_internal:subscription_succeeded","data":{},"channel":"toastr-channel"} app.js:143
Pusher : No callbacks on toastr-channel for pusher:subscription_succeeded 

有两件事你一定要注意,并适当地更新你的问题:

  • -活动是否在其中显示了两次
  • -事件是否记录为传入两次

  • 这里的另一个常见问题是,有时事件可能绑定到两次—因此,两次回调。但是,您的代码并不表明发生了这种情况。

    调试控制台只显示一条消息,而日志显示两条消息。我已经相应地更新了我的问题好吧,那太尴尬了。结果是我在代码中的不同位置调用了两次句柄
    Pusher : Event sent : {"event":"pusher:subscribe","data":{"channel":"toastr-channel"}} app.js:143
    Pusher : Event recd : {"event":"pusher_internal:subscription_succeeded","data":{},"channel":"toastr-channel"} app.js:143
    Pusher : No callbacks on toastr-channel for pusher:subscription_succeeded app.js:143
    Pusher : State changed : connecting -> connected app.js:143
    Pusher : Event sent : {"event":"pusher:subscribe","data":{"channel":"toastr-channel"}} app.js:143
    Pusher : Event recd : {"event":"pusher_internal:subscription_succeeded","data":{},"channel":"toastr-channel"} app.js:143
    Pusher : No callbacks on toastr-channel for pusher:subscription_succeeded