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 }