使用ajax和node.js的简单脚本,为什么它不起作用?

时间:2014-05-27 18:36:47

标签: javascript ajax node.js

我有html页面:

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
    <script type="text/javascript">
        function pushMe(elem) {            
            var request = new XMLHttpRequest();               

            if (!request) alert("Error initializing XMLHttpRequest!");

            request.open('GET', 'proj1.js', true);

            request.onreadystatechange = function () {
                if (request.readyState == 4)
                    elem.value = request.responseText;
            };         
            elem.value = '...';
            request.send(null);   
        }
    </script>
</head>
<body>
    <input type="button" onclick="pushMe(this);" value="Push Me!" id="btn"/>
</body>
</html>

和js文件(proj1.js):

var http = require('http');
var url = require('url');
var querystring = require('querystring');

function accept(req, res) {

    res.writeHead(200, {
        'Content-Type': 'text/plain',
        'Cache-Control': 'no-cache'
    });

    res.end("HELLO!");
}

http.createServer(accept).listen(8080);

proj1.js和test.html在同一个文件夹中。 当我点击按钮时,为什么按钮的值不会改变? (它改变了,但是request.responseText是空的,为什么它不是&#34; HELLO!&#34;?)

1 个答案:

答案 0 :(得分:1)

您的问题:

您正在使用文件协议中的文件,例如:

file:///c:\user\index.html

并且正在尝试访问在HTTP上运行的服务器,这是不可能的(除非您释放浏览器的安全权限,但事实并非如此)。

正确的是你在HTTP脚本上运行Ajax。

学习基础知识

在开始使用网络编程之前,您应该了解什么是HTTPWebServerClientProtocolRequestResponseStatus Code

Node.js入门:

http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/

[被修改]

可能的问题:

  • 调用错误的端口(可能代替使用端口8080,ajax调用端口80)

脚本中的问题:

  • Http错误未经处理(您的ajax未处理http错误)

试试这个:

        request.open('GET', 'proj1.js', true);

        request.onreadystatechange = function () {
            if (request.readyState == 4) {
                if (request.status == 200) {
                    elem.value = request.responseText;
                } else {
                    elem.value = "Error:" + request.status;//Get error
                }
            }
        };

使用console / webtools

按F12(例如firefox),参见“NetWork”和“Console”选项卡:

使用开发者工具: