2012-07-26 7 views
5

오늘 내 서버에서 $.get을 사용하여 PHP 파일의 내용을 가져 오는 동안 매우 이상한 오류가 발생했습니다.

Safari 및 Mac OS X (Snow Leopard)의 Chrome에서만 발생하며 Windows에서는 모든 브라우저에서 올바르게 작동합니다. 그것은 로컬 서버가 아니라

function _fc() { 
    $.get("_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) { 

     if (data=='0') { letItGo=true; $('#loginform').submit(); } 
     else ...//Do some other checks 
    }); 
} 
  • , 그것이 내가 어떤 크로스 도메인 Ajax를 수행하려는 모르겠어요 기존 도메인
  • 와 웹 서버 :

    기능은 같다. 두 파일 모두 같은 디렉토리에 있습니다.

나는 그 해결책을 찾을 수 없습니다.

정확한 오류 :

XMLHttpRequest cannot load 
http://www.asking1.com/_x_fc.php?xaction=login&xv1=something&xv2=something. 
Origin http://asking1.com is not allowed by Access-Control-Allow-Origin. 
+0

Mac OS X에서만 발생한다고하면 클라이언트 OS를 말하는 것입니다. 맞습니까? Mac OS X 테스트와 Windows 테스트에서 동일한 서버입니까? –

+0

이것들은 다른 브라우저라는 것을 알고 있지만 두 가지 모두에서 코드가 작동하지 않습니다. 내 서버는 유닉스 기반이지만 윈도우와 맥 오에스 텐에서만 테스트한다. 전체 오류 - 편집 된 질문이있다 –

답변

0

나는이 이런 식으로 일을했습니다

$.get("http://<?php echo $_SERVER['HTTP_HOST']; ?>/_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) { (...) 

너희들이 최고입니다. 고맙습니다.

2

당신의 대답은 오류 메시지에 있습니다

XMLHttpRequest cannot load 
http://www.asking1.com/_x_fc.php?xaction=login&xv1=something&xv2=something. 
Origin http://asking1.com is not allowed by Access-Control-Allow-Origin.

http://www.asking1.comhttp://asking1.com다른 기원하며, 그래서이 충돌한다 동일한 기원 정책 떨어진다. 여섯 번째 예제 here을 참조하십시오.

오류 메시지에서 문서가 http://asking1.com에 있기 때문에 상대 URL과 함께 인용 부호가있는 경우 오류가 발생하지 않아야하므로 상대 경로는 http://askign1.com/_x_fc.php으로 해결됩니다.

코드에 절대 경로가있는 경우 문제가됩니다. 따옴표로 묶인 코드처럼 보이게하면됩니다.

코드에 실제로 상대 경로가있는 경우 조금만 파고들 필요가 있습니다. 어딘가에서 브라우저가 www.asking1.com 콘텐츠 요청이 asking1.com에서 온 것으로 생각하게 만듭니다.

+0

OP가'$ .get' 호출의 절대 경로를 설정했다면 문제가 될 것이다. as는 상대 경로를 설정하고 있습니다.이 경우 요청을 리디렉션하는 .htaccess 파일이 없으면 실제 도메인은 결코 달라지지 않습니다. – Gavin

+0

@Gavin : True - 따옴표로 묶인 코드가 정확하다고 가정 할 때 (슬프게도 코드를 편집하여 오류를 편집하는 코드를 자주 보았습니다). 그럼에도 불구하고, 오류 메시지는 그것이 SOP 일임이 분명합니다. –

2

www은 기술적으로 하위 도메인입니다. 그래서 당신은 same-origin policy을 위반합니다. 당신은

function _fc() { 
    document.domain = "www.asking1.com"; 
    $.get("_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) { 

     if (data=='0') { letItGo=true; $('#loginform').submit(); } 
     else ...//Do some other checks 
    }); 
} 

를 설정하여이 문제를 해결할 수 있습니다 또는 당신은 완전히 당신이 동일한 지 확인하기 위해 AJAX 요청의 일부로 전달되는 URL을받을 수 있습니다.

+0

한번 시도해 보겠습니다. –

관련 문제