出乎意料的是空白的Ajax响应文本

时间:2015-07-10 17:53:01

标签: javascript html ajax node.js

我尝试使用Node.js测试我的Ajax代码。我之前没有使用它,所以我是新手。 这是我的代码:

function viewTemplate(content) {
  return function() {return [
    m('#header', [
      'my site',
      m('a', {config:m.route, href:'/'}, 'home'),
      m('a', {config:m.route, href:'/1'}, 'page 1'),
      m('a', {config:m.route, href:'/2'}, 'page 2'),
    ]),
    m('hr'),

    m("#view", content),

    m('#footer', 'copyright my site'),
  ]}
}

component1 = {
  view: viewTemplate([
    m('h1', 'component 1 page')
  ])
}

component2 = {
  view: viewTemplate([
    m('h1', 'component 2 page')
  ])
}

m.route(document.body, '/', {
  '/': {view: viewTemplate()},
  '/1': component1,
  '/2': component2,
})

我的Node.js服务器:

<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>

我使用属性运行脚本:onclick =&#34; callServer()&#34;。警报没有告诉我什么。谢谢。

2 个答案:

答案 0 :(得分:2)

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

尝试在here上运行您的客户端。

修改

使用Express包非常简单:

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

要提供静态资源,请使用http://localhost:8888/这样的中间件:

var express = require('express'),
    app     = express();

app.use(express.static(__dirname + '/public'));

您应该将资产放在根目录中的public目录中。

答案 1 :(得分:0)

尝试以下更改:

  1. 更改
  2. xmlhttp.send(null);xmlhttp.send();

    1. 更改
    2. var xmlHttp = false;var xmlHttp = null;

      1. 将if改为如下:
      2. if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');}

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

        2. 确保节点正在运行。

        3. 祝你好运。