for循环mongoose用javascript返回数据

时间:2014-01-02 22:29:29

标签: javascript for-loop mongoose

根据需要,Mongoose会返回以下数据:

[Object]
0: Object
    thread_history: Array[12]
        0: Object
            __v: 0
            _id: "52c5be11be9931f90b000002"
            body: "thread message"
            uid: "maarten"
        __proto__: Object
        1: Object
        2: Object
        3: Object

我使用socket.io发出这个数据然后我尝试将数据转换为html。

通常我会使用以下for循环将发出的数据转换为html

socket.on('thread_history', function (thread_data) {
    if(thread_data.thread_history) {
    threads_log.push(thread_data);
        console.log(threads_log);
        var html = '';
        for (var i = 0; i < threads_log.length; i++) {
            html += '<div class="thread_wrapper">' + (threads_log[i].uid ? threads_log[i].uid : 'Server') + ' - ' + threads_log[i].body + '</div>';
        }
        thread_content.innerHTML = html;
        thread_content.scrollTop = content.scrollHeight;
    }
    else {
        console.log("There is a problem: ", thread_data);
    }
});

当然这对于猫鼬返回的数据不起作用。

我根本无法访问这些对象,有人可以帮助我吗?我做错了什么?

2 个答案:

答案 0 :(得分:0)

看起来你正在循环错误的对象,你正在推“thread_data”并假设循环遍历“thread_data.thread_history”。

或许更改您将数据推送到的行:

threads_log.push(thread_data.thread_history)

否则,如果您需要日志中的整个tread_data,请在循环内执行:

threads_log[i].thread_history.body

答案 1 :(得分:0)

使用jQuery我提出了一个非常好的和干净的解决方案。

  socket.on('thread_history', function (thread_data) {
        if(thread_data.thread_history) {
        threads_log.push(thread_data.thread_history);
            console.log(threads_log);
            var html = '';


            // jquery each the results
            $.each(thread_data.thread_history, function(){ 
                html += '<div class="thread_wrapper">' + this.uid + " - " + this.body + '</div>';
            });


            thread_content.innerHTML = html;
            thread_content.scrollTop = content.scrollHeight;
        }