意外空白的Ajax响应文本
我尝试使用Node.js测试我的Ajax代码。我以前没有用过,所以我是新手。 这里是我的代码:意外空白的Ajax响应文本
<script>
var xmlHttp = false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
xmlHttp = false;
}
}
@end @*/
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
function callServer() {
var url = "http://localhost:8888/";
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = updatePage;
xmlHttp.send(null);
}
function updatePage() {
if (xmlHttp.readyState == 4) {
var response = xmlHttp.responseText;
alert(response);
}
}
</script>
而我的Node.js服务器:
var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Test");
response.end("Test");
}).listen(8888);
我运行该脚本属性:的onclick = “callServer()”。而警报什么都没有显示。谢谢。
您的代码正常工作,问题是您在不同的域或端口上运行您的客户端,然后运行您的服务器。
尝试在http://localhost:8888/上运行您的客户端。
编辑:
这很简单,用快递包裹:
var app = require('express')();
app.get('/', function(req, res) {
res.send('Test');
});
app.get('/index.html', function(req, res) {
res.sendfile('index.html');
});
app.listen(8888, function() {
console.log('Server started at port 8888');
});
编辑#2
,不含任何明示:
var http = require('http'),
fs = require('fs');
var server = http.createServer(function(req, res) {
fs.readFile('./index.html', function(err, data) {
res.writeHeader(200, { 'Content-Type': 'text/html' });
res.write(data);
res.end();
});
}).listen(8888);
server.on('request', function(req, res) {
if(req.url == '/test') {
res.writeHeader(200, { 'Content-Type': 'text/plain' });
res.write('Test');
res.end();
}
});
编辑#3
服务静态资产使用express.static中间件这样的:
var express = require('express'),
app = express();
app.use(express.static(__dirname + '/public'));
你应该把你的资产在根目录public
。
如何在本地主机上运行我的客户端:8888?我没有在任何地方部署我的客户。我的意思是,我把所有的东西都放在我的电脑上,然后在其上运行.html文件。 –
此代码有效,非常感谢。但是有没有使用Express的方法? –
因为我用快递丢失了我的js,css和字体。 –
尝试这些变化:
- 变化
xmlhttp.send(null);
到xmlhttp.send();
- 变化
- 改变,如果别的如下:
下面看起来多余的,你可能想评论它:
// response.write("Test");
确保节点正在运行。
var xmlHttp = false;
到var xmlHttp = null;
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');}
祝你好运。
没有帮助,不幸。 –
尝试此更改: from:response.writeHead(200,{“Content-Type”:“text/plain”}); to:response.writeHead(200,{'Content-Type':'text/html'}); –
你确定你运行了节点吗?像“节点服务器”这样的东西必须使用终端或等价物发送。 –
@KJPrice我很确定。我在文件末尾和函数(request,response)的开头添加了console.log。 –
我创建了一个测试服务器,并且在请求的资源中看到'No'Access-Control-Allow-Origin'标头,这是否显示在您的console.log文件中? – fuyushimoya