首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果调用Strophe.Connection.sendIQ,则Strophe.Connection.addHandler不起作用

如果调用Strophe.Connection.sendIQ,则Strophe.Connection.addHandler不起作用
EN

Stack Overflow用户
提问于 2012-10-31 16:43:38
回答 1查看 5.1K关注 0票数 5

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

代码语言:javascript
复制
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之后被调用。

代码语言:javascript
复制
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?根本原因是什么?我错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-05 18:19:18

试试这个:

代码语言:javascript
复制
addHandler(context.onMessage, null, 'message', 'chat')//or 'normal'

来自Wrox Professional XMPP Programming with JavaScript和jQuery的书籍:

addHandler()函数接受一个或多个参数。第一个参数是在接收到匹配的节时调用的函数。其余的参数是匹配条件。

这些参数的完整列表显示在Strophe源代码中的这个简短的函数定义中:

代码语言:javascript
复制
addHandler: function (handler, ns, name, type, id, from) {
// implementation omitted
}

如果任何条件为空或未定义,则任何节都将匹配。否则,只有当节的特定部分中的字符串相等满足条件时,节才会匹配。

最后四个条件- name、type、id和from -指定节的元素名称和type、id和from属性的过滤器。这四个条件只在顶级元素上检查,而不是在元素的任何后代上检查。第一个条件ns略有不同,它检查顶级元素及其直接子元素。你很快就会明白为什么。名称条件几乎总是为空,以匹配任何节,或者message、presence或iq中的一个。addHandler()示例设置了一个处理程序,接收到的任何节都将调用该处理程序。

type、id和from条件与和节的主要属性相匹配。

您可以使用type来区分常规聊天消息和群聊消息,或者区分IQ-result节和IQ-error节。id标准通常用于处理对特定请求的回复,例如与特定IQ-get请求相关联的IQ-result。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13154102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档