Javascript 返回的socket.io对象在client.js的作用域之外不可用

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.

我有一个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.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);
}