2010-07-13 2 views
1

입니다. 사이트에서 작업 중이며 3 개의 분기가 있습니다. 전형적인 dev-> stage-> 생산 상황.

3 개 다른 URL에 모든 3 실행 :

자극 : http://www.domain.com

단계 : http://www.domain.com/stage

DEV : http://www.domain.com/dev

그래서 내가 보편적 인 코드를하려고 그 파일 경로를 수정하지 않고도 모두 3에서 실행됩니다.

이 특정 브랜치에 대해 설치된 CodeIgniter 설치에 대해 base_path var 집합 만 갖도록하려면.

var base_url = "<?=base_url();?>"; // This sets base_url accordingly. 

$.post(base_url + 'login/ajaxLogin', { // See note below 
     login_email: $('#login_email').val(), 
     login_pass: $('#login_pass').val(), 
     }, 
     function(data) { 
      if(data == 'true') { 
      window.location.href = base_url; 
      } else { 
      $('h2').replaceWith('<h2 style="color:#b81900;">Login Failed</h2>'); 
      return false; 
      } 
}); 

위의 코드는 Chrome에서 정상적으로 작동합니다. 하지만 Safari와 Firefox에서는 작동하지 않습니다. 파이어 폭스에서 그것은 자동으로 실패하고 Safari에서 나는 "Unable to load resource: cancelled"

참고를 얻을 : 내가 base_url를 제거하고 /login/ajaxLogin/dev/login/ajaxLogin 또는 /stage/login/ajaxLogin 모든 것이 완벽하게 작동에 불과 스크립트 경로를 설정합니다.

저는 크로스 도메인 스크립팅 제한이 적용되는 것으로 보입니다. 그러나 그 이유는 확실하지 않습니다.

예, 나는 Same Origin Policy 익숙 그래, 내가 jQuery의 사이트에이 보았다 :

인해 브라우저 보안 제한을 대부분 "아약스"요청이 동일한 기원 정책이 적용됩니다; 요청은 도메인, 하위 도메인, 또는 프로토콜에서 데이터를 검색 할 수 없습니다.

jQuery.post()과 함께 요청하면 스크립트에서도 글로벌 .ajaxError() 메서드를 호출하지 않으면 자동으로 실패합니다.

위의 내용은 내 경우 도메인에 머물러 있기 때문에 적용되지 않습니다. 그래서 어떤 일이 일어나고 있는지 잘 모르겠지만이 문제에 대한 해결 방법을 찾고 싶습니다.

+0

첫 번째 어리석은 질문을 할 것이지만 모든 인스턴스에서 동일한 경로를 반환하는 base_path 함수입니까? – jerebear

+2

먼저 PHP에서 실제로 생성되는 Javascript를 찾고, Chrome Developer Tools 또는 Firebug를 사용하여 실패한 요청의 URL을 조회하는 것이 좋습니다. – Matchu

+0

'base_url()'은 url에 후행하는 슬래시를 추가하므로 물건을 던져 버릴 수도있는'http : // url.com // stage/login/ajaxLogin'과 같이 끝날 수도 있습니다. @Matchu가 말했듯이, 생성되는 URL을 확인하십시오. – stormdrain

답변

1

저는 CodeIgniter에 익숙하지 않지만,이 함수가 값을 따옴표로 묶지 않는 한 직접 래핑해야합니다.

var base_path = "<?= base_path(); ?>"; 
+0

전화하세요. 심지어 그것이 문자열이라는 것을 알지 못했습니다. 그것은 문제 일 수 있습니다! – jerebear

+0

사과드립니다. 이미 따옴표로 묶었습니다. 복사/붙여 넣기를하지 않았습니다. 'var base_url = "";' – solefald