我在server.js中有一个client.js和一个server.js,它连接到mysql表,并从客户端向服务器发送查询。因为我将查询结果输入socket.on(' event',function(queryResult {...})) 在client.js中,我不能在该范围之外使用结果(在client.js内但在该范围之外)
所有连接都在本地使用localhost上的端口完成。
的index.html:
<script src="http://localhost:3000/socket.io/socket.io.js"></script>
<script src="includes/client.js"></script>
<body>
<div id="getQueryStr"></div>
</body>
server.js:
var io = require('socket.io').listen(3000);
var mysql = require('mysql');
.
.
.
io.sockets.on('newQuery', function(newQuery){
MySql_Connection.query(newQuery)
.on('result', function(queryResultsData){
queryResultsArr.push(queryResultsData);
})
.on('end', function(){
socket.emit('query results', queryResultsArr);
});
});
client.js:
$(document).ready(function() {
var socket = io.connect('http://localhost:3000');
var html='';
var tempStr='';
$('input#centerSearchInp').bind('keypress', function(e){
if(e.keyCode==13){
socket.on('query results', function(queryResult){
html = queryResult[0].firstName;
$('#getQueryStr').html(html); //////OK!
tempStr = html;
});
alert(tempStr); //////////NOT OK!
}
}
});
我已经尝试过使用innerText和所有类型的东西,但没有完成我正在做的事情,我只是无法在该范围之外使用这些数据。
答案 0 :(得分:1)
您必须编写一个带回调警报的函数,
$(document).ready(function() {
var socket = io.connect('http://localhost:3000');
var html='';
var tempStr='';
$('input#centerSearchInp').bind('keypress', function(e){
if(e.keyCode==13){
socket.on('query results', function(queryResult){
getTempStr(queryResult, function(tempStr){
alert(tempStr);
});
});
}
}
});
function getTempStr(queryResult, callback){
html = queryResult[0].firstName;
$('#getQueryStr').html(html);
callback(html);
}
答案 1 :(得分:0)
我猜警报会显示一个空框。 你在哪里导入&#39; server.js&#39;档案?
你可能想尝试没有&#39; var&#39;作为tempStr的声明。