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)) 之后放置一个控制台日志,并且每次函数扩展时该消息都会出现在您的控制台中是 运行.