我試圖在node.js + socket.io + mysql上做一個小遊戲。爲什麼這個JS代碼被幾行簡單的代碼阻塞了?
node.js服務器讀取關於該字段和項目的數據庫信息(40x40)。這個信息保存自己,並根據要求提供。
問題是,如果你只是發送請求,信息會來。但是,如果你在這些信息出現後嘗試做某些事情,例如將數據中的扇區和對象放在數組中,請求不起作用。我試圖在函數之前放置一個超時以允許時間獲取信息;我試圖把它放在一個按鈕上。沒有幫助。阻止一切的代碼在client.html
之間/*
和*/
。沒有這個代碼,它很好用。
server.js
:var mysql = require('mysql'); var io = require('socket.io').listen(8080); var TESTGAME = 'testgame'; var TABLES_MAP1 = 'map1'; var client = mysql.createClient({ user: 'root', password: '', }); client.query('USE '+TESTGAME); client.query( ('SELECT * FROM '+TABLES_MAP1+' WHERE id_sector_x < 40 && id_sector_y < 40'), function(err, results, fields) { if (err) {throw err;} Map1 = (results); io.sockets.on('connection', function (socket) { socket.emit('info', Map1); socket.on('back', function (data) { console.log(data); }); }); client.end(); } );
client.html
:<!doctype html> <html> <head> <meta charset="utf-8"> <title>Map</title> <script src="http://127.0.0.1:8080/socket.io/socket.io.js"></script> <script src="json.js" type="text/javascript"></script> <script type='text/javascript'> window.onload = function() { var socket = io.connect('http://127.0.0.1:8080'); socket.on('info', function (data) { Mappp = (data); socket.emit('back', Mappp.length); }); }; Map1=Mappp; function mapp(){ m=0; //As info looks like this [1600] i need to make it look like this [40][40]. So this m will be m++ on each iteration to know what info should be put in. for (x=0;x<40;x++){ for (y=0;y<40;y++){ /* switch (Map1[m].type_sector) { case "grass": map[x][y]=0; [break] case "water": map[x][y]=1; [break] case "swamp": map[x][y]=2; [break] default: map[x][y]=0; [break] }; switch (Map1[m].obj_sector) { case "no": objectMap[x][y]=0; [break] case "wall": objectMap[x][y]=1; [break] default: objectMap[x][y]=0; [break] }; */ m++; } } window.alert('Done'); } setTimeout(mapp, 1000); </script> <form name=""> <input type="submit" value="call mapp" onclick=mapp()> </form> </head> <body> <script type="text/javascript"> </script> </body> </html>
對不起,我的英語:)
謝謝!我沒有聲望,但我會稍後投票))) – user1086671