2012-08-08 6 views
0

Node.js의 서버에 웹의 자바 스크립트 코드에서 간단한 연결 (요청 - 응답)을 보내려고합니다. 이 방법은 만들기 ggeeett 요청 것을 내가 검색 계속 내가 FireBugNodeJS에 자바 스크립트로 GET 요청

에 오류가있어이 코드를 실행

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

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

내가 발견

나는 follows로 요청을 만들기 위해 노력했다 동일한 도메인에 있습니다. 도메인 간 요청을하려면 다른 전략을 사용해야합니다.

은 내가 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) 당신은 당신이 여기

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

우리가 정상적인 GET을 통과 JSONP를 사용하여 GET 사용하려는 때문에 params뿐만 아니라 콜백 =?.당신은 당신이 CORS를 사용할 수에 대한 모든 브라우저 호환성을 걱정하지 않는 경우

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

3) : 당신은 당신의 서버에서 다음을 반환합니다 내가 Here

을 기록 할 수있는 것보다 당신은 훨씬 더 예를 볼 수 있습니다
1

크로스 도메인 아약스는 서버의 특별한 지원이 필요합니다.

CORS : http://en.wikipedia.org/wiki/Cross-origin_resource_sharing 일부 브라우저는 아직 지원하지 않습니다. 하나의 도메인이 다른 도메인과 통신 할 수 있고 어떤 데이터인지를 브라우저에 알려주는 요청 및 응답의 특수 헤더를 포함합니다.

또는 JSONP : http://en.wikipedia.org/wiki/JSONP 어디에서나 작동하지만 구현 제한 사항이 있습니다. 그것은 당신이 원하는 데이터를 실행하고 전달할 자바 스크립트 함수 콜백에 응답을 래핑하는 서버를 포함합니다.

어느 쪽이든이 방법을 사용하려면 서버를 각각 설정해야합니다.