對JavaScript而言,我相當陌生,我一直對我認爲是全局變量的範圍存在問題。傳遞數據時發生JavaScript變量作用域問題
這裏就是我通過Socket.IO接收來自用戶的數據:(server.js)
var locationData = {lat: '-20', long: '20'};
var latNumber;
var longNumber;
//SocketIO data
var chat = require('express')();
var http = require('http').Server(chat);
var io = require('socket.io')(http);
io.sockets.on('connection', function (socket) {
socket.on('new message', function (msg) {
locationData = msg;
latNumber = parseFloat(locationData.lat);
longNumber = parseFloat(locationData.long);
io.emit('message', msg.message);
});
});
http.listen(5670, function(){
console.log('listening on *:5670');
});
io.on('connection', function(socket){
console.log('a user connected');
socket.on('disconnect', function(){
console.log('user disconnected');
});
});
function getLat(){
return latNumber;
}
function getLong(){
return latNumber;
}
下面是HTML的腳本,我想接收數據:(HelloWorld.html的)
<script type="text/javascript" src="/server.js"></script>
<script>
var viewer = new Cesium.Viewer('cesiumContainer');
var citizensBankPark = viewer.entities.add({
name : 'Test',
position : Cesium.Cartesian3.fromDegrees(getLat(),getLong()),
point : {
pixelSize : 5,
color : Cesium.Color.RED,
outlineColor : Cesium.Color.WHITE,
outlineWidth : 2
},
label : {
text : 'Test',
font : '14pt monospace',
style: Cesium.LabelStyle.FILL_AND_OUTLINE,
outlineWidth : 2,
verticalOrigin : Cesium.VerticalOrigin.BOTTOM,
pixelOffset : new Cesium.Cartesian2(0, -9)
}
});
viewer.zoomTo(viewer.entities);
</script>
我試圖從latNumber和longNumber中讀取數據,並在server.js中定義並設置爲HelloWorld.html中的位置分配。我遇到的問題是,一旦數據到達HelloWorld.html,它是未定義的,並在瀏覽器中給出錯誤。
現在我不確定的是爲什麼它沒有定義。記錄server.js中的latNumber和longNumber變量可以正常工作,並在其中包含數據。同時將getLat()getLong()中的返回語句更改爲硬編碼變量(如15)可以正常工作,並將其傳遞到HelloWorld.html,然後執行它應該執行的操作。只有將兩者結合在一起纔會出錯!
任何幫助或指針將不勝感激!謝謝!
是的,它運行在一個節點上。js服務器實例。忘了提及!我會試着玩這個,讓你知道它是怎麼回事。 – SirFerret
我遇到的唯一問題是瀏覽器中記錄的404錯誤,因爲找不到/位置。我向根添加了一個位置文件夾,它仍然出現。查找關於loadJson的更多信息,試圖找出它不想工作的原因。 – SirFerret
編輯server.js後,您是否停止並重新啓動節點服務器?磁盤上不應該有任何「位置」文件夾。上面第一個代碼塊中的代碼指示節點如何通過返回位置數據而不是文件夾來響應「位置」Web請求。 – emackey