2014-09-05 47 views
0

我有一個client.js和server.js,在server.js我連接到mysql表,併發送查詢從客戶端到服務器。因爲我得到的查詢結果到socket.on('事件',函數(queryResult {...}) 在client.js我不能使用該範圍以外的結果(在client.js內但在該範圍之外)返回的socket.io對象是不可用的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和所有種類的東西,但沒有試過metter我在做什麼,我只是不能使用這個範圍以外的數據。

+0

當你'警報(tempStr);'的'查詢results'事件可能沒有發射,所以它的價值仍然是空的。 – cameron 2014-09-05 10:31:33

+0

但html和tmpStr是全局變量,而queryResult [0] .firstName保存的值是肯定的,因此具有html var,那麼爲什麼它不能用作啓動字符串呢? – shmnsw 2014-09-05 10:37:05

+0

如果如你所說,我該如何解僱它? – shmnsw 2014-09-05 10:38:57

回答

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); 
} 
0

我想警報顯示一個空的框。 你在哪裏導入'server.js'文件?

您可能想嘗試不使'var'作爲tempStr的聲明。

+0

是的,它顯示一個空框,你是什麼意思通過導入server.js – shmnsw 2014-09-05 11:18:56

+0

我不需要導入它即時溝通與socket.io – shmnsw 2014-09-05 11:19:34