2015-07-10 72 views
1

我尝试使用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()”。而警报什么都没有显示。谢谢。

+0

你确定你运行了节点吗?像“节点服务器”这样的东西必须使用终端或等价物发送。 –

+0

@KJPrice我很确定。我在文件末尾和函数(request,response)的开头添加了console.log。 –

+0

我创建了一个测试服务器,并且在请求的资源中看到'No'Access-Control-Allow-Origin'标头,这是否显示在您的console.log文件中? – fuyushimoya

回答

2

您的代码正常工作,问题是您在不同的域或端口上运行您的客户端,然后运行您的服务器。

尝试在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

+0

如何在本地主机上运行我的客户端:8888?我没有在任何地方部署我的客户。我的意思是,我把所有的东西都放在我的电脑上,然后在其上运行.html文件。 –

+0

此代码有效,非常感谢。但是有没有使用Express的方法? –

+0

因为我用快递丢失了我的js,css和字体。 –

0

尝试这些变化:

  1. 变化

xmlhttp.send(null);xmlhttp.send();

  • 变化
  • 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');}

  • 下面看起来多余的,你可能想评论它:
    // response.write("Test");

  • 确保节点正在运行。

  • 祝你好运。

    +0

    没有帮助,不幸。 –

    +0

    尝试此更改: from:response.writeHead(200,{“Content-Type”:“text/plain”}); to:response.writeHead(200,{'Content-Type':'text/html'}); –