2012-11-20 4 views
0

설정 JSON API 및 API 호출에 사용할 정적 HTML 페이지 역할을하는 레일즈 앱 설정이 하나 있습니다. 인수를 위해 레일 API는 foo.com에 있고 정적 html 페이지는 bar.com에 있습니다. 내가 bar.com에서 jQuery로 아약스 GET 요청을 할 때 쿠키가 JSON의 API로 다시 전송되지 않습니다Ajax가 아닌 리소스를로드 할 때 쿠키가 전달됩니까?

if !cookies[:foo] 
     cookies[:foo] = "testing #{rand(500)}" 
    else 
     logger.info(cookies[:foo]) 

    render :json => { :cookie => cookies[:foo] } 

다음 foo.com 응용 프로그램에

나는 이런 식으로 뭔가가있다. 내가 페이지를 내가 쿠키를 foo.com과 bar.com 사이에 앞뒤로 보내 얻을 수있는 리소스를로드하는 경우 쿠키를 통과 할 수 있어요 왜

$.get('http://foo.com/', function(data){console.log(data)}) 

그러나

<script type="text/javascript" src="http://foo.com"></script> 

는 아는 사람 있나요 스크립트 리소스로 스크립트를로드 할 때 앞뒤로 교차 도메인을 사용하고 간단한 아약스 요청을 수행하지 않을 때? 이 주변의 어떤 방법?

답변

2

$.ajax을 사용하면 ajax 호출이 크로스 사이트임을 JSONP 요청해야합니다.

$.ajax({ 
    url: "xxxx", 
    crossDomain : true, 
    dataType : 'json',//if response is in JSON Notation 
    success  : function (result){ 
    alert(result); 
    } 
}); 
+0

그러나 그 전에는 내 문제를 해결하지 못했습니다. 쿠키 foo는 여전히 요청에서 전송되지 않습니다. 레일 측에서는 요청이 도메인 간으로 올 수있게 허용하기 위해 헤더 [ 'Access-Control-Allow-Origin'] = '*'를 추가했으나 요청과 함께 쿠키 [: foo]가 전송되지 않았습니다. – ajorgensen

+0

모질라에서 firebug와 같은 브라우저를 콘솔에 설치 했습니까? 거기에서 요청을 모니터 할 수 있습니다. –

0

는 일 techie 말한 것처럼, 당신은 활성화되어 있어야합니다 크로스 도메인에 대한 위해 $ 아약스를 사용하고 JSON (P) 요청을해야합니다.

쿠키는 이러한 종류의 구현에서는 까다로울 수 있습니다. 일종의 해킹을 사용하여 쿠키를 앞뒤로 보내더라도 오래된 브라우저 (또는 값싼 브라우저)가 쿠키를 차단합니다.

* 기침 * 인터넷 익스플로러 * 기침 *

이과 같이 URL에 쿠키를 전달하는 것입니다 주위에 "해킹"하는 간단한 방법 :이 예에서

$.ajax({ 
    url: "//domain.com/path/to/stuff;cookie1=value1?someParameter2=value2", 
    crossDomain : true, 
    dataType : 'json',//if response is in JSON Notation 
    success  : function (result){ 
    alert(result); 
    } 
}); 

, 나는했습니다 내 요청에 "value1"이라는 값을 가진 쿠키 이름 "cookie1"과 "value2"값을 가진 GET 매개 변수가 있음을 서버에 알 렸습니다.

희망이 있습니다.

관련 문제