我是node.js的新手。现在,我正在尝试编写一个简单的网站,用户可以在其中输入要处理的内容,并接收结果,例如:寻找一些东西。
我尝试按如下方式实现它:
撰写index.html
编写server.js
,创建服务器,并使用var index = fs.readFileSync('index.html'); response.end(index);
在index.html中添加ajax代码,以接收用户的输入并将其发送到服务器
最后一步是在server.js中添加代码,该代码处理请求并将结果发送到ajax以显示它。
我的问题是关于第4步。在server.js中,当它收到ajax请求时,它应该以某种方式将结果添加到index.html文件,并使用response.end(index)
发送回来,或者仅发送回结果?如果是后者,我试过,它将发送index.html页面和结果。但我只想要结果。
以下是两个文件index.html
和server.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);
答案 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()从服务器接收。