javascript – 如果调用Strophe.Connection.sendIQ,Strophe.Connection.addHandler无效

我有一个关于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方法将永远不会被回调,但是onRoster方法可以在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,'message','chat')//or 'normal'

使用JavaScript和jQuery Book进行Wrox Professional XMPP编程:
addHandler()函数接受一个或多个参数.第一个参数是函数
收到匹配节时调用.其余参数是匹配标准.满满的
这些参数的列表显示在Strophe源代码的缩写函数定义中:

addHandler: function (handler,ns,name,type,id,from) {
// implementation omitted
}

如果任何条件为null或未定义,则任何节都将匹配.否则,节只会匹配
如果他们在节的特定部分通过字符串相等满足标准.最后四个标准 –
name,id和from – 在节的元素名称和类型,id和from上指定过滤器
属性.这四个标准仅在顶级元素上检查,而不是在任何元素上检查
后人.第一个标准ns略有不同,并检查顶级元素为
以及它的直系孩子.你很快就明白了.
名称标准几乎总是为空,以匹配任何节,或消息,存在,
或者iq. addHandler()示例设置了一个可以为任何节调用的处理程序
接收.
type,id和from标准匹配,和的主要属性
节.您可以使用类型来区分常规聊天消息和群聊消息
或者将IQ结果节与IQ错误节分开. id标准通常用于处理
回复特定请求,例如与特定IQ-get请求关联的IQ结果.

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: <span id=&quot...
jQuery 添加水印 <script src="../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...