为什么将HTML文件的内容作为对此AJAX请求的响应(节点服务器处于活动状态)发送?

时间:2016-04-15 05:45:40

标签: javascript html ajax server listeners

这是HTML:

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <script type="text/javascript" src="jquery-1.12.1.js"></script>
        <script type="text/javascript" src="page.js"></script>
    </body>
</html>

这里是页面Javascript:

$(document).ready(function() {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState === 4) {
            console.log(xhr.responseText);
        }
    };
    xhr.open('GET', '');
    xhr.send();
});

这里是节点服务器Javascript:

var http = require('http');
http.createServer(function (request, response) {
  response.statusCode = 200;
  response.setHeader('Content-Type', 'text/plain');
  respone.write('Hello, dog');
  response.end();
}).listen(80);
console.log('Server is running!!');

当我启动HTML页面并检出控制台时,它已经打印了HTML页面的内容(即以<!DOCTYPE html>开头)。我试图让它打印出来#34; Hello,dog&#34;来自Node服务器,但似乎服务器的响应在某种程度上得到了胜利,可能是因为浏览器正在通过同一端口有效地监听来自HTML文件的响应。

奇怪的是,如果我将GET请求的url更改为服务器Javascript文件,它实际上将返回该文件的内容。此外,如果我添加一个按钮并通过单击按钮发出AJAX请求(即,该页面已经加载了该页面),HTML文件内容仍会打印到控制台。

我只是在尝试看看这一切是如何运作的。具体来说,我试图让我的页面Javascript与我的节点服务器进行交互,而不使用HTML作为请求和响应的媒介。我还在使用Treehouse AJAX课程,但总的来说,我很难找到有关设置它们进行交流的资源。大多数资源似乎涉及一方或另一方。

1 个答案:

答案 0 :(得分:0)

根据上面提供的内容,我只希望在浏览器中导航到localhost:80时看到“Hello Dog”。这就是服务器能够返回的全部内容。如果您希望自己的路由服务于静态索引页面,则必须执行以下操作:

var http = require('http');
var fs = require('fs');
fs.readFile('./index.html', function (err, html) {
    if (err) {
        throw err; 
    }       
    http.createServer(function(request, response) {  
        response.writeHeader(200, {"Content-Type": "text/html"});  
        response.write(html);  
        response.end();  
    }).listen(80);
});

但是,如上所述,不建议这样做。一般来说,您希望使用某种middleware来帮助管理内容和路由等内容。到目前为止,我认为express是最常见的。这是routing的快速概述,另一个是关于服务static content的概述。有大量的免费资源可以帮助一个人。