Javascript 合并具有相同名称的字符串,如何?Strophe
Javascript combine string that has the same name,how?Strophe
我正在将 strophe mam 与 ejabberd 服务器一起使用,我正在尝试将消息组合起来 returns 并将其保存在会话存储或字符串中。
情况是这样的,一个函数returns我多个同名的字符串,例如:
var message =HI;
var message= how are you;
var message = i am fine;
var message = how about you?;
我不确定 strophe 插件是如何运行的,但我没有调用循环,它只是将所有这些都呼应出来。我 console.log 它,基本上我上面的内容在控制台日志中给出。
我如何将以上内容组合成
var combinedmessages = HI,how are you,i am fine,how about you?
还是把它们结合起来?
var combinedmessages = HI 你好吗我很好你呢?
我试过 .push()
,试过 message+="message"
试过 concat();
None 似乎行得通。
编辑
我将变量名设置为我希望的任何名称,但是 msg_data.message 是消息的显示方式,我什至没有将其放入循环中。它使用查询选择器。
我为通过 Strophe 插件获取消息而编写的代码:
conn2.mam.query(jid, {
"with": jid3,"before": '',"max":"10",
onMessage: function(message) {
var id = message.querySelector('result').getAttribute('id');
var fwd = message.querySelector('forwarded');
var d = fwd.querySelector('delay').getAttribute('stamp');
var msg = fwd.querySelector('message');
var msg_data = {
id:id,
with: Strophe.getBareJidFromJid(msg.getAttribute('to')),
timestamp: (new Date(d)),
timestamp_orig: d,
from: Strophe.getBareJidFromJid(msg.getAttribute('from')),
to: Strophe.getBareJidFromJid(msg.getAttribute('to')),
type: msg.getAttribute('type'),
body: msg.getAttribute('body'),
message: Strophe.getText(msg.getElementsByTagName('body')[0])
};
var message = msg_data.message;
console.log(message);
Strophe Mam 插件
(function(){
'use strict';
Strophe.addConnectionPlugin('mam', {
_c: null,
_p: [ 'with', 'start', 'end' ],
init: function (conn) {
this._c = conn;
Strophe.addNamespace('MAM', 'urn:xmpp:mam:0');
},
query: function (jid, options) {
var _p = this._p;
var attr = {
type:'set',
id:jid
};
var mamAttr = {xmlns: Strophe.NS.MAM};
if (!!options['queryid']) {
mamAttr.queryid = options['queryid'];
delete options['queryid'];
}
var iq = $iq(attr).c('query', mamAttr).c('x',{xmlns:'jabber:x:data', type:'submit'});
iq.c('field',{var:'FORM_TYPE', type:'hidden'}).c('value').t('urn:xmpp:mam:0').up().up();
var i;
for (i = 0; i < this._p.length; i++) {
var pn = _p[i];
var p = options[pn];
delete options[pn];
if (!!p) {
iq.c('field',{var:pn}).c('value').t(p).up().up();
}
}
iq.up();
var onMessage = options['onMessage'];
delete options['onMessage'];
var onComplete = options['onComplete'];
delete options['onComplete'];
iq.cnode(new Strophe.RSM(options).toXML());
this._c.addHandler(onMessage, Strophe.NS.MAM, 'message', null);
return this._c.sendIQ(iq, onComplete);
}
});
})();
您添加的代码将无法正常工作(它缺少一些右括号),但实际上我认为您可以执行以下操作:在文件顶部添加一个可以连接的全局变量:
var MESSAGE_FULL_STRING = '';
现在您有代码 var message = msg_data.message;
,将其替换为:
MESSAGE_FULL_STRING += msg_data.message;
现在完整的字符串应该存储在变量 MESSAGE_FULL_STRING
中,所以只需在该行 (console.log(MESSAGE_FULL_STRING)
) 之后放置一个控制台日志,并且每次函数扩展时该消息都会出现在您的控制台中是 运行.
我正在将 strophe mam 与 ejabberd 服务器一起使用,我正在尝试将消息组合起来 returns 并将其保存在会话存储或字符串中。
情况是这样的,一个函数returns我多个同名的字符串,例如:
var message =HI;
var message= how are you;
var message = i am fine;
var message = how about you?;
我不确定 strophe 插件是如何运行的,但我没有调用循环,它只是将所有这些都呼应出来。我 console.log 它,基本上我上面的内容在控制台日志中给出。 我如何将以上内容组合成
var combinedmessages = HI,how are you,i am fine,how about you?
还是把它们结合起来? var combinedmessages = HI 你好吗我很好你呢?
我试过 .push()
,试过 message+="message"
试过 concat();
None 似乎行得通。
编辑
我将变量名设置为我希望的任何名称,但是 msg_data.message 是消息的显示方式,我什至没有将其放入循环中。它使用查询选择器。
我为通过 Strophe 插件获取消息而编写的代码:
conn2.mam.query(jid, {
"with": jid3,"before": '',"max":"10",
onMessage: function(message) {
var id = message.querySelector('result').getAttribute('id');
var fwd = message.querySelector('forwarded');
var d = fwd.querySelector('delay').getAttribute('stamp');
var msg = fwd.querySelector('message');
var msg_data = {
id:id,
with: Strophe.getBareJidFromJid(msg.getAttribute('to')),
timestamp: (new Date(d)),
timestamp_orig: d,
from: Strophe.getBareJidFromJid(msg.getAttribute('from')),
to: Strophe.getBareJidFromJid(msg.getAttribute('to')),
type: msg.getAttribute('type'),
body: msg.getAttribute('body'),
message: Strophe.getText(msg.getElementsByTagName('body')[0])
};
var message = msg_data.message;
console.log(message);
Strophe Mam 插件
(function(){
'use strict';
Strophe.addConnectionPlugin('mam', {
_c: null,
_p: [ 'with', 'start', 'end' ],
init: function (conn) {
this._c = conn;
Strophe.addNamespace('MAM', 'urn:xmpp:mam:0');
},
query: function (jid, options) {
var _p = this._p;
var attr = {
type:'set',
id:jid
};
var mamAttr = {xmlns: Strophe.NS.MAM};
if (!!options['queryid']) {
mamAttr.queryid = options['queryid'];
delete options['queryid'];
}
var iq = $iq(attr).c('query', mamAttr).c('x',{xmlns:'jabber:x:data', type:'submit'});
iq.c('field',{var:'FORM_TYPE', type:'hidden'}).c('value').t('urn:xmpp:mam:0').up().up();
var i;
for (i = 0; i < this._p.length; i++) {
var pn = _p[i];
var p = options[pn];
delete options[pn];
if (!!p) {
iq.c('field',{var:pn}).c('value').t(p).up().up();
}
}
iq.up();
var onMessage = options['onMessage'];
delete options['onMessage'];
var onComplete = options['onComplete'];
delete options['onComplete'];
iq.cnode(new Strophe.RSM(options).toXML());
this._c.addHandler(onMessage, Strophe.NS.MAM, 'message', null);
return this._c.sendIQ(iq, onComplete);
}
});
})();
您添加的代码将无法正常工作(它缺少一些右括号),但实际上我认为您可以执行以下操作:在文件顶部添加一个可以连接的全局变量:
var MESSAGE_FULL_STRING = '';
现在您有代码 var message = msg_data.message;
,将其替换为:
MESSAGE_FULL_STRING += msg_data.message;
现在完整的字符串应该存储在变量 MESSAGE_FULL_STRING
中,所以只需在该行 (console.log(MESSAGE_FULL_STRING)
) 之后放置一个控制台日志,并且每次函数扩展时该消息都会出现在您的控制台中是 运行.