因此,我正在尝试制作一个非常基本的node.js服务器,该服务器接受字符串请求,从数组中随机选择一个,然后返回所选的字符串。不幸的是,我遇到了一些问题。
这是前端:
function newGame()
{
guessCnt=0;
guess="";
server();
displayHash();
displayGuessStr();
displayGuessCnt();
}
function server()
{
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET","server.js", true);
xmlhttp.send();
string=xmlhttp.responseText;
}
这应该将请求发送到server.js:
var http = require('http');
var choices=["hello world", "goodbye world"];
console.log("server initialized");
http.createServer(function(request, response)
{
console.log("request recieved");
var string = choices[Math.floor(Math.random()*choices.length)];
console.log("string '" + string + "' chosen");
response.on(string);
console.log("string sent");
}).listen(8001);
很明显,这里有几处错误:
我感觉到我“连接”这两个文件的xmlhttp.open
方式在方法和使用中都无法正确response.on
发送字符串到前端。
我对如何在localhost上调用此页面感到有些困惑。前端的名称为index.html,服务器的地址为8001。初始化server.js后,我应该在localhost上访问哪个地址才能访问初始的html页?我应该将其更改为.listen(index.html)
或类似的名称吗?
我如何实现这一点(使用.responsetext
等)还有其他明显的问题吗?
(对冗长的多问题帖子很抱歉,但是各种教程和node.js源均假设用户已经对这些事情有所了解。)
您的请求应该发送到服务器,而不是实例化它的server.js文件。因此,该请求应如下所示:xmlhttp.open("GET","http://localhost:8001/", true);
此外,您正在尝试为前端(index.html)提供服务,并以相同的URI提供AJAX请求。为此,您将必须在server.js中引入逻辑,以区分AJAX请求和常规http访问请求。为此,您将需要引入GET / POST数据(即call http://localhost:8001/?getstring=true
),或者对AJAX请求使用不同的路径(即call http://localhost:8001/getstring
)。然后,在服务器端,您需要检查请求对象以确定在响应上写什么。对于后一种选项,您需要使用“ url”模块来解析请求。
您正在正确调用,listen()
但错误地编写了响应。首先,如果您希望在导航到http:// localhost:8001 /时提供index.html ,则需要使用response.write()
或将文件内容写入响应中response.end()
。首先,您需要包括fs=require('fs')
以访问文件系统。然后,您需要实际提供文件。
如果您异步使用XMLHttpRequest,则需要指定一个回调函数(已完成,第三个参数= true),并且想对响应做一些事情。您现在拥有的方式string
将是undefined
(或可能是null
),因为该行将在AJAX请求完成之前执行(即responseText仍然为空)。如果同步使用它(第三个参数= false),则可以编写内联代码。不建议这样做,因为它会在请求期间锁定浏览器。异步操作通常与onreadystatechange函数一起使用,该函数一旦完成就可以处理响应。您需要学习XMLHttpRequest的基础知识。从 这里 开始。
这是一个包含以上所有内容的简单实现:
server.js:
var http = require('http'),
fs = require('fs'),
url = require('url'),
choices = ["hello world", "goodbye world"];
http.createServer(function(request, response){
var path = url.parse(request.url).pathname;
if(path=="/getstring"){
console.log("request recieved");
var string = choices[Math.floor(Math.random()*choices.length)];
console.log("string '" + string + "' chosen");
response.writeHead(200, {"Content-Type": "text/plain"});
response.end(string);
console.log("string sent");
}else{
fs.readFile('./index.html', function(err, file) {
if(err) {
// write an error response or nothing here
return;
}
response.writeHead(200, { 'Content-Type': 'text/html' });
response.end(file, "utf-8");
});
}
}).listen(8001);
console.log("server initialized");
前端(index.html的一部分):
function newGame()
{
guessCnt=0;
guess="";
server();
displayHash();
displayGuessStr();
displayGuessCnt();
}
function server()
{
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET","http://localhost:8001/getstring", true);
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
string=xmlhttp.responseText;
}
}
xmlhttp.send();
}
您需要对AJAX感到满意。使用mozilla学习中心学习XMLHttpRequest。使用基本的XHR对象后,您很可能希望使用一个良好的AJAX库,而不是手动编写跨浏览器的AJAX请求(例如,在IE中,您将需要使用ActiveXObject而不是XHR)。jQuery中的AJAX非常好,但是如果您不需要
更新:我在上面的代码中已更改response.sendHeader()
为新response.writeHead()
代码!!!
问题内容: 使用Ajax,我试图仅将Json数据发送到节点服务器,不进行任何处理,仅在发送时发出警报,在接收到时发出警报: 这是我的html5:具有onclick函数的简单按钮,可触发该函数使用ajax调用 这是节点服务器的一部分:用于创建服务器并侦听某些操作 没有警报被触发,所以我不认为ajax正在尝试发送信息。 问题答案: 在服务器端尝试此操作: 在客户端: 希望这对你有用
问题内容: 我对AJAX还是很陌生,所以很抱歉可能会引起误解,但我还没有完全理解。 我正在尝试一件简单的事情。我有一个文件,基本上是我的后端。然后我有一个和一个。就是这样,这是一个非常基本的设置。现在,在我的上,我正在获取一些数据(邮件地址)。现在,我想将该数据发送到我的后端(进入)以在那里使用它。我怎样才能做到这一点? 我已经找到了一些关于使用node.js进行AJAX的帖子,但是我不明白,特别
问题内容: 最近,我对于是否可以直接发送输入/文本区域数据而不包含在html 中感到困惑。我想在网页上,如果我们想从用户那里获取信息,然后将文本发送到身份验证服务器,则无论使用哪种方式提交,都必须使用。 但是我的论文的一位匿名审稿人声称,可以使用html5标签“ textarea”和JS AJAX帖子来绕过。虽然我做了很多尝试来实现他的方法的实验,但是都失败了。 我想知道是否真的有某种方式可以在不
问题内容: 我有由函数 .push 制成的数组。数组中的数据非常大。如何将此最佳方式发送到PHP脚本? script.php: 最好的方法是什么? 问题答案: 将您的数据字符串编码为JSON。 在你的PHP中 注意 通过POST发送数据时,它必须作为键值对。 从而 是错的。而是:
我必须在nodeJS和angular 6中实现类似webmail的电子邮件服务器。 关于我的场景,用户需要提供他们的电子邮件和电子邮件密码,然后我必须识别他们的smtp服务器地址和身份验证。之后,用户应该能够发送和接收电子邮件连接到提供的电子邮件。 我已经研究了我有哪些选项,大多数文章说node-mailer是最好的发送电子邮件的,但没有接收电子邮件和node-imap的功能,除了那些我目前最好的
问题内容: 我正在尝试通过套接字将数据从node.js发送到Java。我四处搜寻,但没有什么真正有用的。我习惯使用socket.io,但是在这种情况下,它似乎并不适合于此。似乎所有用于node.js的套接字扩展都不真正适合发送消息,而是听消息并回答某些问题。 我的Java应用程序基本上应该从node.js接收一些工作,完成工作并将一些结果发送回node.js。不,该工作无法在node.js上完成,