通过javascript向NodeJS发出GET请求

时间:2012-08-08 23:33:33

标签: javascript jquery node.js get request

我正在尝试从网络上的javascript代码到Node.js中的服务器进行简单的连接(请求 - 响应)。

我尝试将请求设为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);

3 个答案:

答案 0 :(得分:2)

因此,您遇到了跨域问题。您有几个选择:

1)因为你正在使用node,所以使用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)由于您只想使用GET,您可以使用JSONP

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

这里我们传递你正常的GET参数以及callback =?。您将从服务器返回以下内容:

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

3)如果您不关心所有浏览器兼容性,可以使用CORS:    你可以看到一个比我能写Here

更好的例子

答案 1 :(得分:1)

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

CORS:http://en.wikipedia.org/wiki/Cross-origin_resource_sharing 并非所有浏览器都支持。它涉及请求和响应中的特殊标头,告诉浏览器允许一个域与另一个域通信,以及哪些数据。

或JSONP:http://en.wikipedia.org/wiki/JSONP 哪个可以在任何地方工作,但有一些实施限制。它涉及服务器将响应包装在一个javascript函数回调中,该回调将执行并传入您想要的数据。

无论哪种方式,都需要为每种方法设置服务器。

答案 2 :(得分:0)

我认为您的问题是Same Origin Policy。您的浏览器必须从node.js实例获取网页。

否则,您必须使用CORS之类的内容。关于SO还有一个很好的问题:Ways to circumvent the same-origin policy