Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.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 如果引发异常,则不会调用addEventListener_Javascript_Php_Jquery_Server Sent Events_Icws - Fatal编程技术网

Javascript 如果引发异常,则不会调用addEventListener

Javascript 如果引发异常,则不会调用addEventListener,javascript,php,jquery,server-sent-events,icws,Javascript,Php,Jquery,Server Sent Events,Icws,我正在尝试实现客户端和服务器之间的通信 我已经实现了它,除了服务器返回异常外,它工作得非常好 我不确定异常发生后,为什么没有将异常消息返回给客户端 下面是我的听众是如何写的 var evtSource = new EventSource('poll.php'); evtSource.addEventListener("getMessagingQueue", function(e) { console.log(e); var data = JSON

我正在尝试实现客户端和服务器之间的通信

我已经实现了它,除了服务器返回异常外,它工作得非常好

我不确定异常发生后,为什么没有将异常消息返回给客户端

下面是我的听众是如何写的

    var evtSource = new EventSource('poll.php');

    evtSource.addEventListener("getMessagingQueue", function(e) {
        console.log(e);
        var data = JSON.parse(e.data);
        console.log(data);
        processServerData(data);

    }, false);
下面是我的PHP代码。(即,
poll.php
)文件

即使存在异常,如何让侦听器获取消息

已编辑 当我在addEventListner行之后执行此代码时

evtSource.onerror = function(e) {
                console.log(e);
            };
这就是我得到的

error { target: EventSource, isTrusted: true, currentTarget: EventSource, eventPhase: 2, bubbles: false, cancelable: false, defaultPrevented: false, timeStamp: 1435614201283000, originalTarget: EventSource, explicitOriginalTarget: EventSource, NONE: 0 }

PHP服务器引发的异常似乎导致整个调用失败。

最有可能的是,您的Javascript代码在处理返回的PHP异常时遇到问题,因为它不是有效的JSON。这将导致Javascript代码中出现未捕获的异常,从而结束执行

解决这个问题的方法是以Javascript可以处理的方式抛出异常。与其抛出异常,不如尝试类似于
die(“数据:.json\u编码(数组(“异常”=>“缺少凭据”)))

另外,尝试用try-catch块包围
JSON.parse()
,并将异常打印到控制台


您的
processData
函数中可能会抛出一个未捕获的异常,但是我们无法在不看到代码的情况下知道。我通过添加
ob_end_clean()解决了这个问题
在两个
头(…
行)下面,它有相同的输出,就像没有异常一样。看起来像这样的
事件:getMessagingQueue数据:{“userStatus”:{“statusId”:“You not loggin!”,“isLoggedIn”:false,“icwsDescription”:{}
@blex addEventListener查看输出并仅发送摘录
数据:{“userStatus”:{“statusId”:“您未登录!”,“isLoggedIn”:false,“icwsDescription”:{}}
这不是json问题。如果是
console.log(e);
应该给我一些东西,但在我的情况下,它什么也没有给我。我想问题是,由于异常,整个调用失败我只是更新了我的问题。当服务器抛出异常时,似乎整个调用都失败了,这不是json问题。如果是,那么
console.log(e)
应该给我一些东西,但在我的情况下,它什么也没有给我。这不是json问题。如果当时是
console.log(e);
应该给我一些东西,但在我的情况下,它什么也没有给我。
error { target: EventSource, isTrusted: true, currentTarget: EventSource, eventPhase: 2, bubbles: false, cancelable: false, defaultPrevented: false, timeStamp: 1435614201283000, originalTarget: EventSource, explicitOriginalTarget: EventSource, NONE: 0 }