2012-08-08 62 views
0

我正在嘗試從網絡上的JavaScript代碼向Node.js中的服務器執行簡單的連接(請求 - 響應)。在javascript中獲取請求到NodeJS

我曾試圖提出此類請求follows

var request = new XMLHttpRequest(); 
request.open('GET', 'http://localhost:4444/', false); 
request.send(); 

if (request.status === 200) { 
    console.log(request.responseText); 
} 

運行這段代碼,我在FireBug

得到一個錯誤我繼續搜索,我發現這個方法僅適用於製作ggeeett請求在同一個域上。爲了提出跨域請求,我們必須使用其他策略。

我發現了一個jQuery method,似乎我是在正確的道路:

$.get(
    'http://localhost:4444/', 
    function(data) { 
     alert("sucess"); 
     //Do anything with "data" 
    } 
); 

在這種情況下,我得到了同樣的答覆without the error

它看起來很有效,但從不顯示「警報」訊息!怎麼了?我究竟做錯了什麼?

Node.js的服務器代碼:

var http = require("http"); 

http.createServer(function(request, response) { 
    response.writeHead(200, {"Content-Type": "text/html"}); 
    response.write("Response"); 
    response.end(); 
}).listen(4444); 

回答

2

因此您遇到了跨域問題。你有幾個選項:

1)因爲你使用節點,使用socket.io。它符合跨域。

在客戶端:

<script src="Full path to were socket IO is held on your server//socket.io.js"></script> 
<script> 
    var socket = io.connect(); 

    socket.on('some_callback', function(data){ 
     // receive data 
    }); 

    socket.emit('some_other_callback', {'data': value}); //send data 
</script> 

服務器:

var io = require('socket.io').listen(server); 

// define interactions with client 
io.sockets.on('connection', function(socket){ 
    //send data to client 
    socket.emit('some_callback', {'data': value}); 

    //recieve client data 
    socket.on('some_other_callback', function(data){ 
     //do something 
    }); 
}); 

2)既然你只是想用讓你可以使用JSONP

$.getJSON('url_to_your_domain.com/?callback=?&other_data=something, 
    function(data){ 
     //do something 
    } 
); 

下面我們通過正常的GET params以及回調= ?.您將返回從您的服務器如下:

require('url'); 
var r = url.parse(req.url,true); 
r.query.callback + '(' + some JSON + ')' 

3)如果你不關心你可以使用CORS所有瀏覽器的兼容性: 你可以看到一個更好的例子比我能寫Here

1

跨域ajax需要服務器的特殊支持。

CORS:http://en.wikipedia.org/wiki/Cross-origin_resource_sharing 還不是所有的瀏覽器都支持。它包含請求和響應中的特殊標題,告訴瀏覽器允許一個域與另一個域進行通信,以及哪些數據。

或JSONP:http://en.wikipedia.org/wiki/JSONP 什麼地方可以工作,但有一些實施限制。它涉及服務器將響應包裝在一個javascript函數回調中,該回調將執行並傳遞您想要的數據。

無論哪種方式,都需要爲每種方法設置服務器。