Javascript 返回的socket.io对象在client.js的作用域之外不可用
我有一个client.js和一个server.js,在server.js中我连接到mysql表,并将查询从客户端发送到服务器。当我将查询结果放入socket.on('event',function(queryResult{…}))时 在client.js中,我不能在该范围外使用结果(在client.js内但在该范围外) 所有连接都通过本地主机上的端口在本地完成。 index.html:Javascript 返回的socket.io对象在client.js的作用域之外不可用,javascript,mysql,node.js,sockets,Javascript,Mysql,Node.js,Sockets,我有一个client.js和一个server.js,在server.js中我连接到mysql表,并将查询从客户端发送到服务器。当我将查询结果放入socket.on('event',function(queryResult{…}))时 在client.js中,我不能在该范围外使用结果(在client.js内但在该范围外) 所有连接都通过本地主机上的端口在本地完成。 index.html: <script src="http://localhost:3000/socket.io/socket.
<script src="http://localhost:3000/socket.io/socket.io.js"></script>
<script src="includes/client.js"></script>
<body>
<div id="getQueryStr"></div>
</body>
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和所有类型的东西,但不管我在做什么,我就是无法在该范围之外使用这些数据。我猜警报显示的是一个空框。 您在哪里导入“server.js”文件
您可能希望尝试不使用'var'作为tempStr的声明。您必须为警报编写一个带有回调的函数
$(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);
}
当您
警报(tempStr)时
,查询结果
事件可能尚未触发,因此其值仍然为空。但是html和tmpStr是全局变量,queryResult[0]。firstName确实持有该值,html var也是如此,所以为什么不能将其用作已启动的字符串?如果是这样,如何触发它?是的,它们是全局的,但是当你调用alert(tempStr)时
,查询结果的回调可能尚未运行。例如,您在mysql中的搜索持续10秒,然后,queryResult[0]。firstName
将在10秒后执行,但alert(tempStr)代码>立即运行,而不是10秒后。那么我应该如何处理这种情况?我对node.js有点陌生是的,它显示一个空框,导入server.jsi是什么意思?我不需要导入它,我正在与socket.io通信
$(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);
}