返回socket.io对象在client.js范围之外不可用

时间:2014-09-05 10:21:50

标签: javascript mysql node.js sockets

我在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和所有类型的东西,但没有完成我正在做的事情,我只是无法在该范围之外使用这些数据。

2 个答案:

答案 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的声明。