我正在尝试从网络上的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);
答案 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。