2015-07-10 67 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'}); –