>  기사  >  백엔드 개발  >  Ajax 크로스 도메인 완벽한 솔루션 예시 공유

Ajax 크로스 도메인 완벽한 솔루션 예시 공유

小云云
小云云원래의
2018-01-08 15:46:081514검색

회사는 이벤트 페이지를 만들고, 프로세스의 모든 인터페이스를 검색하고, 도메인 전체에 걸쳐 Ajax 요청을 하려고 합니다. 다음은 크로스 도메인 및 여러 솔루션에 대한 간략한 소개입니다.

브라우저에서 구현하는 동일 출처 정책의 제한으로 인해 XmlHttpRequest는 현재 소스(도메인 이름, 프로토콜, 포트)에서만 리소스를 요청할 수 있으므로 AJAX는 도메인 간을 허용하지 않습니다. 다음은 일반적으로 사용되는 세 가지 방법입니다.

1. jsonp 액세스

JSONP(JSON with Padding)는 스크립트 태그를 서버 측에 통합하여 클라이언트에 반환할 수 있는 비공식 프로토콜이며 크로스 플랫폼 구현은 다음에서 구현됩니다.

구현 방법

 1)

<script type="text/javascript"> 
  $.ajax({ 
    url:url, 
    dataType:'jsonp', 
    data:'', 
    jsonp:'callback', 
    success:function(result) { 
    }, 
  }); 
</script>

 2)

$.getJSON(url+"?callback=?", 
  function(result) { 
  });

참고: 1] jsonp는 get으로만 요청할 수 있으며, post 요청을 사용하더라도 자동으로 변환됩니다. post for you;

 2] jsonp는 데이터를 얻는 데 사용할 수 있을 뿐만 아니라 데이터를 제출하는 데에도 사용할 수 있습니다.

2. damain 방법

 이 방법은 기본 도메인이 동일하지만 하위 도메인이 다른 경우에 사용할 수 있습니다. 동일한 도메인 이름을 가리키도록 수정하십시오. 기본 도메인은 동일하지만 보조 도메인 이름은 서로 관련되지 않은 두 개의 URL의 경우 이 방법을 사용할 수 없습니다.

document.domain = 'a.com'

참고: 실제 개발에서는 많은 사람들이 로컬 호스트의 도메인 이름을 사용합니다. 회사의 도메인 이름과 전혀 다릅니다. 이 방법은 도메인을 변경해도 결과가 나오지 않습니다. 해결 방법은 c 드라이브의 호스트 파일을 수정하고 로컬 주소 localhost를 회사 도메인 이름으로 변경하는 것입니다. 회사의 2차 도메인 이름을 입력한 후 이 방법을 사용할 수 있습니다.

다음은 다음을 가리키는 수정된 도메인 이름입니다.

#127.0.0.1 localhost
127.0.0.1 company.com

3, postMessage

PostMessage는 h5의 새로운 기능 중 하나입니다. h5 게임, 데이터 제출 등을 용이하게 하기 위해 iframe을 중첩하는 것은 불가피합니다.

  여기서는 iframe의 ID가 'iframe'이라고 가정합니다.

iframe 내부의 js에

var message = 'date';<br>if (parent.document.getElementById(‘iframe‘)) {
          //捕获iframe
          var iframe = parent.document.getElementById(‘iframe').contentWindow;
          //发送消息
          parent.postMessage(message, "*");
        }

를 작성해야 합니다. 그러면 iframe 외부의 js에

window.addEventListener('message',function(e){
      },false);

를 작성해야 합니다. 메시지 데이터를 가져옵니다.

관련 권장사항:

Ajax 교차 도메인 요청 시 Parsererror 오류 솔루션

JS는 Ajax 교차 도메인 요청 플라스크 응답 콘텐츠를 구현합니다.

인스턴스는 Ajax 교차 도메인 요청의 원리를 자세히 설명합니다

위 내용은 Ajax 크로스 도메인 완벽한 솔루션 예시 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.