【发布时间】:2017-09-19 00:24:44
【问题描述】:
我正在尝试使用 strophe 库发送一个 IQ 节来请求用户名册。 Strophe为此提供了一个函数,称为sendIQ。
我尝试像这样发送 IQ 节:
let iq_str = "<iq type='get' id='roster1'><query xmlns='jabber:iq:roster'/></iq>";
let parser = new DOMParser();
let iq = parser.parseFromString(iq_str, "text/xml");
XMPP.conn.sendIQ(iq, onRoster);
但是,strophe 的 sendIQ 函数在 var id = elem.getAttribute('id'); 行中崩溃并出现 TypeError: e.getAttribute is not a function 错误,因为(如果我理解正确的话)iq 不是 XML 元素对象,而是 XML 文档对象。
经过一番搜索,我可以通过这样做来避免崩溃:
let iq_str = "<iq type='get' id='roster1'><query xmlns='jabber:iq:roster'/></iq>";
let parser = new DOMParser();
let iq = parser.parseFromString(iq_str, "text/xml").getElementsByTagName("iq")[0];
XMPP.conn.sendIQ(iq, onRoster);
但是这样我显然没有收到任何回复,因为我没有在传递的iq 变量中指定查询。
我觉得我一定错过了一些非常微不足道的东西,但我已经被困了一段时间了。我发现的所有示例都使用 jQuery,但我相信必须有一个不使用它的解决方案。
【问题讨论】:
-
我的错,
getElementsByTagName确实返回了子元素,所以 IQ 是正确的。问题是我没有注意到回调onRoster中的错误。
标签: javascript xml xmpp strophe