Javascript 如果调用Strophe.Connection.sendIQ,则Strophe.Connection.addHandler no工作

Javascript 如果调用Strophe.Connection.sendIQ,则Strophe.Connection.addHandler no工作,javascript,jquery,xmpp,strophe,Javascript,Jquery,Xmpp,Strophe,我有一个关于Strophe.Connection.addHandler和Strophe.Connection.sendIQ的问题。 下面的代码可以工作: Strophe.Connection.addHandler(context.onMessage, null, 'message') onMessage = function (msgXML){ var to = msgXML.getAttribute('to'); var from = msgXML.getAttribute(

我有一个关于Strophe.Connection.addHandler和Strophe.Connection.sendIQ的问题。 下面的代码可以工作:

Strophe.Connection.addHandler(context.onMessage, null, 'message')

onMessage = function (msgXML){
    var to = msgXML.getAttribute('to');
    var from = msgXML.getAttribute('from');
    var fromBareJid = Strophe.getBareJidFromJid(from);
    var type = msgXML.getAttribute('type');
    var elems = msgXML.getElementsByTagName('body');
    var body = elems[0]
    var text = Strophe.getText(body);
    return true;
}
但是如果我在调用addHandler之后调用setContactData,onMessage方法将永远不会被回调,但是onFloster方法可以在sendIQ之后调用

setContactData = function(){
    var iq = $iq({
        type: 'get'
    }).c('query', {
        xmlns: 'jabber:iq:roster'
    });
    Strophe.Connection.sendIQ(iq, context.onRoster);
}

onRoster = function(iq){
    $(iq).find('item').each(function(){
        var jid = $(this).attr('jid');     
        // transform jid into an id
        var jid_id = CommonUtil.getNameFromJid(jid);
        userList = userList + "','" + jid_id;
    });
为什么不能回拨onMessage?根本原因是什么?我缺少什么?

试试这个:

addHandler(context.onMessage, null, 'message', 'chat')//or 'normal'

来自Wrox Professional XMPP编程与JavaScript和jQuery书籍:
addHandler()函数接受一个或多个参数。第一个参数是 在收到匹配节时调用。其余参数为匹配条件。
完整参数 这些参数的列表显示在Strophe源代码中的此缩写函数定义中:

addHandler: function (handler, ns, name, type, id, from) {
// implementation omitted
}
如果任何条件为null或未定义,则任何节都将匹配。否则,节将只匹配 如果它们在节的特定部分通过字符串相等满足标准。
最后四个标准- 名称、类型、id和发件人-在节的元素名称和类型、id和发件人上指定筛选器 属性。这四个条件仅在顶级元素上检查,而不在元素的任何一个元素上检查 后代。第一个标准ns稍有不同,它在顶层元素中检查为 以及它的直系子女。你很快就会明白为什么。 名称标准几乎总是空的,以匹配任何节,或消息、存在、状态或状态之一, 或者智商。addHandler()示例设置了一个可以为任何节调用的处理程序 已收到。
类型、id和from条件与和的主要属性匹配 诗节
您可以使用类型来区分普通聊天信息和群组聊天信息 或者把IQ结果节和IQ错误节分开。id标准通常用于处理 对特定请求的回复,如与特定IQ get请求关联的IQ结果