Tengo un client.js y un server.js, en server.js estoy conectado a la tabla mysql y envío consultas desde el cliente al servidor. a medida que obtengo los resultados de las consultas en el socket.on ('evento', función (queryResult {...})) en client.js no puedo usar el resultado fuera de ese alcance (dentro de client.js pero fuera de ese alcance)

todas las conexiones se realizan localmente con un puerto en 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);
        });
});

Cliente.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!
        }

    }
});

He intentado usar innerText y todo tipo de cosas, pero no importa lo que esté haciendo, simplemente no puedo usar estos datos fuera de ese alcance.

0
shmnsw 5 sep. 2014 a las 14:21

2 respuestas

La mejor respuesta

Tienes que escribir una función con devolución de llamada para la alerta,

$(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
Srikanth Jeeva 5 sep. 2014 a las 18:03

Supongo que la alerta muestra un cuadro vacío. ¿Dónde está importando el archivo 'server.js'?

Puede intentar no tener 'var' como declaración de tempStr.

0
larrytech 5 sep. 2014 a las 11:06