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

Returning socket.io object is not usable outside the scope in client.js

本文关键字:作用域 js io socket 对象 client 返回      更新时间:2023-09-26

我有一个client.js和一个server.js,在server.js中我连接到mysql表,并从客户端向服务器发送查询。当我将查询结果放入套接字时。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>

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和各种各样的东西,但不管我在做什么,我就是不能在这个范围之外使用这些数据。

您必须编写一个带有警报回调的函数,

$(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);
}

我猜警报显示了一个空框。您在哪里导入"server.js"文件?

您可能希望尝试不使用"var"作为tempStr的声明。