Javascript XMPP';s客户与Strophe之间的IQ交换

Javascript XMPP';s客户与Strophe之间的IQ交换,javascript,xmpp,strophe,Javascript,Xmpp,Strophe,所以我有两个浏览器在运行,都有相同的页面。在此页面中,您可以使用帐户登录到服务器 连接是用Strophe建立的。一切都是HTML和javascript 现在我已经建立了一个聊天室(在两个浏览器之间,每个浏览器都有不同的用户登录)。这是完美的工作 我现在想要实现的是从一个用户向另一个用户发送IQ。两人都在状态栏中表示他们正在接收IQ(一个表示“获得请求”,另一个表示“获得结果”) 现在,我用以下方法创建我的智商: var iq = $iq({type: 'get', to: this.re

所以我有两个浏览器在运行,都有相同的页面。在此页面中,您可以使用帐户登录到服务器

连接是用Strophe建立的。一切都是HTML和javascript

现在我已经建立了一个聊天室(在两个浏览器之间,每个浏览器都有不同的用户登录)。这是完美的工作

我现在想要实现的是从一个用户向另一个用户发送IQ。两人都在状态栏中表示他们正在接收IQ(一个表示“获得请求”,另一个表示“获得结果”)

现在,我用以下方法创建我的智商:

    var iq = $iq({type: 'get', to: this.receiver}).c('query', {xmlns: 'http://jabber.org/protocol/pubsub#retrieve-subscriptions'});
    XmppObject.xmpp.connection.sendIQ(iq);
这是在一个可以通过按下按钮调用的函数中设置的。 侦听器的构建如下所示:

    $(XmppObject.xmpp).bind("iq", function(event, data){
    addToStatus('Received an iq: \n');
    handlePong(data.iq);
});
以韩乐鹏为例:

    function handlePong(msg)
{
    var objMsg = $(msg);
    var from = objMsg.attr('from');
    var type = objMsg.attr('type');
    var id = objMsg.attr('id');
    var text = 'Received iq from ' + from + ' with id ' + id + ' and type ' + type + '\n\n';
    addToStatus(text);
}
现在,当客户端1向客户端2发送IQ时,结果如下:

客户1:
从接收到的iqclient2@domain使用id乒乓球并键入结果

客户2:

现在有没有办法在client2的状态中显示他已收到初始请求?

您需要:

  • 用您自己的名称空间构建一个
    iq
    ,您不能简单地回收现有名称空间。它会起作用,但显然是错的
  • 在Strophe的连接上添加一个处理程序,以处理此类型的iq。您不能通过使用jQuery的绑定来实现这一点。您应该在连接上使用
    addHandler

我能找到的最简单的例子就是strophe插件的
ping
实现,请看

Man您的代码有太多明显的错误,我不知道从哪里开始。你是否真的得到了另一个客户收到iq的回复,因为他不应该…我也不太理解这个问题。client1和client2的角色是什么?你在最后一句话中所说的“初始请求”是什么意思?@ggozad:哇,真的有那么糟糕吗?这些只是我希望展示的片段。除此之外,它也是一个原型,而不是最终版本。回答另一个问题:是,client1接收结果IQ(键入:result)。@MattJ:client1向client2发送IQ。客户端2然后发送结果IQ。这部分是有效的。但是client2并没有说他收到了client1的请求。希望这能让目标更清晰一点。@MattJ用jQuery解析小节很棒。为了注册处理程序,我会使用Strophe的api,这就是原因。对不起,client2仍然没有给出他正在返回结果IQ的迹象,或者他甚至没有得到IQ重写并将重试。这是我收到的:RECV:K,开始工作了,显然你真的需要添加一个源;)谢谢@ggozad的帮助