【问题标题】:GET request in javascript to NodeJSGET请求在javascript到NodeJS
【发布时间】:2012-08-08 23:33:33
【问题描述】:

我正在尝试从网络上的 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 出现错误

我继续搜索,我发现这个方法只是在同一个域上发出 GET 请求。要发出跨域请求,我们必须使用其他策略。

我找到了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);

【问题讨论】:

    标签: javascript jquery node.js get request


    【解决方案1】:

    所以您遇到了跨域问题。您有几个选择:

    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) 既然你只想使用 GET 你可以使用 JSONP

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2018-01-06
          • 1970-01-01
          • 2018-08-25
          • 1970-01-01
          • 1970-01-01
          • 2017-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多