使用node.js进行ajax实时搜索

时间:2015-03-18 11:34:30

标签: ajax node.js request response

我是node.js的新手。现在,我正在尝试编写一个简单的网站,用户可以在其中输入要处理的内容,并接收结果,例如:寻找一些东西。

我尝试按如下方式实现它:

  1. 撰写index.html

  2. 编写server.js,创建服务器,并使用var index = fs.readFileSync('index.html'); response.end(index);

  3. 显示索引页面
  4. 在index.html中添加ajax代码,以接收用户的输入并将其发送到服务器

  5. 最后一步是在server.js中添加代码,该代码处理请求并将结果发送到ajax以显示它。

  6. 我的问题是关于第4步。在server.js中,当它收到ajax请求时,它应该以某种方式将结果添加到index.html文件,并使用response.end(index)发送回来,或者仅发送回结果?如果是后者,我试过,它将发送index.html页面和结果。但我只想要结果。

    以下是两个文件index.htmlserver.js

    index.js

    <!DOCTYPE html>
    <html>
    <!-- Client search using Ajax -->
    
    <head>
        <title>live search</title>
        <script>
            function getResults(query) {
            if (query.length===0) { 
            document.getElementById("results").innerHTML="";
            return;
          }
          if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
          } else {  // code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
          xmlhttp.open("GET","http://127.0.0.1:2000/search?"+query,true);
          xmlhttp.onreadystatechange=function() {
            if (xmlhttp.readyState==4 && xmlhttp.status==200) {
              document.getElementById("results").innerHTML=xmlhttp.responseText;
            }
          };
          xmlhttp.send();
        }
        </script>
    </head>
    <body>
        <hr>
        <input type="text" id="search" onkeyup="getResults(this.value)"/>
        <br>
        <div id="results">
        </div>      
    </body>
    </html>
    

    server.js

    var http = require('http');
    var fs = require('fs');
    var index = fs.readFileSync('index.html');
    
    var url = require('url');
    
    http.createServer(function (req, res) {
    res.writeHead(200, {'ContentType': 'text/html'});
    res.end(index);
    
    //codes for request processing
    result="";
    var path = url.parse(req.url).pathname;
    console.log(path);
    if (path.length!==0) {
        result = "I'm the result";
    }
    res.write(result);
    
    }).listen(2000);
    

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题。 您希望在运行时在index.html和server.js之间发送数据。

为此,您需要使用socket.io库。

对于客户端(index.html) 像socket.io一样使用客户端库。

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io();
</script>

现在如果您想发送您在index.html(客户端)中获得的数据,那么您可以使用

将其发送到服务器
socket.emit("EventName",{"data1": value1 , "data2" : value2 , [...]}) 

然后,您可以使用事件监听器(如。

)在服务器上接收它
socket.on("EventName",function(data){ 
//here you can use "data" parameter that contains values sent from client 
});

这是服务器发送/接收方案的客户端。 对于服务器到客户端,做同样的事情,即在服务器上使用socket.emit()发送到客户端,并在客户端使用socket.on()从服务器接收。