我在我的網站上進行實時聊天,現在只是輪詢。我希望與時俱進,並用node.js版本替換它。我一直在取得很好的進展,但現在我停留在看起來只是語法問題的東西上。我有問題從我的node.js應用程序傳遞數組到我的javascript客戶端
所以我在做什麼時,當用戶第一次來到我的網站,我想向他們展示在mysql數據庫中最近的聊天。因此,這將是
時間用戶他們的信息
我送的用戶將數據從我app.js連接與
io.sockets.on('connection', function (socket) {
//Make connection to mysql
connection.query('select values from my_table limit 5', function(err, rows, fields) {
user_info = new Array();
for (i = 0; i < rows.length; i++) {
user_info[i] = new Array();
user_info[i]['time'] = rows[i].time;
user_info[i]['user'] = rows[i].user;
user_info[i]['their_message'] = rows[i].their_message;
}
io.sockets.emit('some_event_tag', user_info);
});
所以此工程文件,只是當我嘗試的行並在與「some_event_tag」相關的功能下訪問這些數據,則顯示我的語法已關閉,因爲我沒有收到這些信息。所以在客戶端,我試圖訪問數據與
some_event_tag: function(data) {
var msg = '';
for (i = 0; i < data.length; i++) {
msg = $('<div class="msg"></div>')
.append('<span class="name">' + data[i]['user'] + '</span>: ')
.append('<span class="text">' + data[i]['their_message'] + '</span>');
$('#messages')
.append(msg);
msg = '';
}
},
但無論出於什麼原因,我得到「未定義」。在服務器端,如果我改變
io.sockets.emit('some_event_tag', user_info);
喜歡的東西
io.sockets.emit('some_event_tag', user_info[0]['user']);
我可以(通過只是說「數據」)來訪問客戶端上的此值。當然,在這種情況下,我只傳遞一個值。不是我想要的。在客戶端,我也可以正確地看到正在傳遞五個數組元素。換句話說,data.length正確設置爲5.但是,我實際上無法找出訪問客戶端數據的語法。這不僅僅是典型的JavaScript數組嗎?這一點我有點難以理解,谷歌這次沒有幫助我。任何幫助你們可以給予不勝感激。
哎呦。好的,我做了更正。不,時間應該是時間,用戶應該是用戶!你提出一個關於發射可以發送的好消息。它可能只能發送字符串,這就是爲什麼我能夠看到個別值而不是在發送數組時。如果是這樣的話,我想我可以發送一個json字符串並使用它。讓我看看我能做些什麼。 – bigyellow
可修改,它看起來你的意見把我送到了正確的道路。顯然你不能傳遞數組與發射?讓我們這樣說吧,如果可以的話,我不知道該怎麼做。所以我所做的就是傳遞一個json字符串,然後在客戶端對它進行評估並用data [i] .value訪問它。你可以用JSON.parse(data)將json字符串轉換爲一個對象,但不是所有的瀏覽器都可以運行該代碼行,而是需要包含外部的json解析來處理這些情況。至少我有一個解決方案。謝謝。 – bigyellow
@ user2232419我很高興能幫上忙。此外,我可以很快看到這些信息對我有幫助。謝謝! – Sebivor