ajax使用node.js进行实时search

我是node.js的新手 现在我试图写一个简单的网站,用户可以input一些东西给服务器来处理,并接收结果,比如search一些东西。

我试图执行它如下:

  1. index.html

  2. 编写server.js ,它创build一个服务器,并使用var index = fs.readFileSync('index.html'); response.end(index);显示索引页面var index = fs.readFileSync('index.html'); response.end(index); var index = fs.readFileSync('index.html'); response.end(index);

  3. 在index.html中添加ajax代码,接收用户input并发送给服务器

  4. 最后一步是在server.js中添加代码,处理请求并将结果发送给ajax进行显示。

我的问题是关于第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); 

如果我正确理解你的问题。 你想在运行时在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()从服务器接收。