使用 Strophe.js 解析 XML websocket 响应
Parsing XML websocket responses with Strophe.js
我正在使用 Strophe.js 通过 websockets 连接到 XMPP 服务器。这是当连接的用户收到消息时我得到的示例响应:
<message xmlns='jabber:client' xml:lang='en' to='agent@chat.domain.com/6665193359253278721998' from='client@chat.domain.com/Mac' type='chat' id='purple42fccc5c'>
<archived by='agent@chat.domain.com' id='1557026681122740' xmlns='urn:xmpp:mam:tmp'/>
<stanza-id by='agent@chat.domain.com' id='1557026681122740' xmlns='urn:xmpp:sid:0'/>
<active xmlns='http://jabber.org/protocol/chatstates'/>
<body>
1
</body>
</message>
检查了文档,但我找不到任何关于该主题的有用信息。 Strophe 是否有内置的方法来从不同类型的消息中提取我需要的数据?或者我还需要其他东西吗?
创建连接后,您需要定义挂钩以接收消息并能够与之交互:
connection.addHandler(onMessage, null, 'message', 'chat');
connection.addHandler(onMessage, null, 'message', 'groupchat');
然后,您只需定义onMessage
函数即可。
onMessge: function(stanza) {
$stanza = $(stanza);
messageId = $stanza.attr('id') || null;
to = $stanza.attr('to');
from = $stanza.attr('from').toLowerCase();
barejid = Strophe.getBareJidFromJid(from);
type = $stanza.attr('type');
bodies = $stanza.find('body');
body = bodies.length ? Strophe.xmlunescape(Strophe.getText(bodies[0])) : '';
....
}
希望对您有所帮助。
我正在使用 Strophe.js 通过 websockets 连接到 XMPP 服务器。这是当连接的用户收到消息时我得到的示例响应:
<message xmlns='jabber:client' xml:lang='en' to='agent@chat.domain.com/6665193359253278721998' from='client@chat.domain.com/Mac' type='chat' id='purple42fccc5c'>
<archived by='agent@chat.domain.com' id='1557026681122740' xmlns='urn:xmpp:mam:tmp'/>
<stanza-id by='agent@chat.domain.com' id='1557026681122740' xmlns='urn:xmpp:sid:0'/>
<active xmlns='http://jabber.org/protocol/chatstates'/>
<body>
1
</body>
</message>
检查了文档,但我找不到任何关于该主题的有用信息。 Strophe 是否有内置的方法来从不同类型的消息中提取我需要的数据?或者我还需要其他东西吗?
创建连接后,您需要定义挂钩以接收消息并能够与之交互:
connection.addHandler(onMessage, null, 'message', 'chat');
connection.addHandler(onMessage, null, 'message', 'groupchat');
然后,您只需定义onMessage
函数即可。
onMessge: function(stanza) {
$stanza = $(stanza);
messageId = $stanza.attr('id') || null;
to = $stanza.attr('to');
from = $stanza.attr('from').toLowerCase();
barejid = Strophe.getBareJidFromJid(from);
type = $stanza.attr('type');
bodies = $stanza.find('body');
body = bodies.length ? Strophe.xmlunescape(Strophe.getText(bodies[0])) : '';
....
}
希望对您有所帮助。