PHP에서 Ajax 크로스 도메인 솔루션의 jsonp 예제 분석

coldplay.xixi
풀어 주다: 2023-04-09 12:56:01
앞으로
2691명이 탐색했습니다.

PHP에서 Ajax 크로스 도메인 솔루션의 jsonp 예제 분석

이 문서에서는 PHP의 Ajax 크로스 도메인 솔루션 jsonp에 대해 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

먼저 json과 jsonp의 차이점을 설명하겠습니다.

json은 텍스트 기반 데이터 교환 방법 또는 데이터를 설명하는 형식입니다.

관련 학습 권장 사항: php 프로그래밍(동영상)

var person = {
  "name": "test",
  "age": "25",
  "sex": "男"
};

var data = [1, 2, 3, 4, 5];
로그인 후 복사

그리고 jsonp는 비공식 도메인 간 데이터 상호 작용 프로토콜입니다. 이 프로토콜을 사용하면 사용자가 콜백 매개변수를 서버에 전달할 수 있으며, 그러면 서버는 data. 이 콜백 매개변수를 함수 이름으로 사용하여 json 데이터를 래핑하면 클라이언트가 반환된 데이터를 자동으로 처리하도록 자체 함수를 사용자 정의할 수 있습니다.

예를 들어 a.com 웹사이트에서 b.com의 b.js를 인용했는데, 이런 크로스 도메인 참조는 오류를 일으키지 않습니다. 즉, js 파일을 호출할 때 영향을 받지 않는다는 뜻입니다. 도메인 간.

<script type="text/javascript" src="http://www.b.com/b.js"></script>
로그인 후 복사

그런 다음 b.js에 다음 코드를 추가하여 실행 가능한지 확인합니다.

alert("I from b");
로그인 후 복사

실행 가능한 것이 확실합니다.

그렇다면 a.com에서 js 함수를 만들고 b.com 아래의 b.js에서 호출하면 가능할까요?

a.com 아래의 index.html은 다음과 같습니다.




  
  


  
  <script type="text/javascript" src="http://www.b.com/b.js"></script>

로그인 후 복사

b.com 아래의 b.js는 다음과 같습니다.

a("from b");
로그인 후 복사

위의 내용도 b.js의 데이터가 실행되는 것을 알 수 있습니다. 실제로 함수 a에서 올바르게 전송되었습니다.

또 문제가 발생합니다. a.com에서 생성된 함수 이름은 b.js에서 호출되는 함수 이름과 일치해야 합니다. 그렇다면 이 함수 이름을 b.com 서버를 통해서만 알 수 있도록 하려면 어떻게 해야 할까요? 주소 표시줄 추가 이전 콜백=함수 이름이 전달됩니다. 물론 이름 콜백은 바뀔 수 있지만 다들 이렇게 이름을 붙이기 때문에 관습이다.

a.com 아래의 index.html은 다음과 같습니다. b.com 아래의

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <script type="text/javascript">
    function a(data) {
      alert("uid :" + data.uid + "name :" + data.name);
    }
  </script>

  <!-- 注意这里把b.js改成b.php了 -->
  <script type="text/javascript" src="http://www.b.com/b.php?callback=a"></script>
</body>
</html>
로그인 후 복사

b.php는 다음과 같습니다.

<?php
$callback = !empty($_GET[&#39;callback&#39;]) ? trim($_GET[&#39;callback&#39;]) : &#39;&#39;;

if(!empty($callback)) {
  $data = json_encode(array(
    &#39;uid&#39; => 1,
    &#39;name&#39; => &#39;测试&#39;,
  ));

  echo "{$callback}({$data});";
}
로그인 후 복사

위의 콜백 함수 이름을 알고 나면 b.com 서버에서도 실행될 수 있습니다. 데이터를 처리한 후 문자열 연결을 통해 출력합니다.

jsonp 지원은 jquery에서 제공됩니다. a.com의 index.html은 다음과 같습니다.

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <p class="info"></p>
  <script type="text/javascript" src="http://www.b.com/jquery.js"></script>
  <script type="text/javascript">
  $.ajax({
    dataType: "jsonp",
    url: "http://www.b.com/b.php",
    jsonp: "callback",
    success: function(data) {
      $(".info").text("uid:" + data.uid + " name:" + data.name);
    }
  });
  </script>
</body>
</html>
로그인 후 복사

도메인 간 정책 제한 표는 다음과 같습니다.

http://www.a.com/a.js http://script.a.com/b.jshttp://www.a.com/a.js http://a.com/b.jshttp://www.a.com/a.js http://www.b.com/b.js
URL 설명 통신 허용
http://www.a.com/a.js
http://www.a.com/b.js
동일한 도메인 이름으로 allowed
http://www.a.com/lab/a.js
http://www.a.com/script/b.js
동일한 도메인 이름 아래에 다른 폴더 allowed
http://www.a.com:8000/a.js
http://www.a.com/b.js
동일한 도메인 이름, 다른 포트 허용되지 않음
http://www.a.com/a.js
https://www.a.com/b.js
동일한 도메인 이름, 다른 프로토콜 허용되지 않음
http://www.a.com/a.js
http://127.0.0.100/b.js
도메인 이름과 도메인 이름에 해당하는 IP는 허용되지 않습니다

동일한 기본 도메인, 다른 하위 도메인
허용되지 않음

동일한 도메인 이름, 다른 2차 도메인 이름(위와 동일)
허용되지 않음

다른 도메인 이름
허용되지 않음

위 내용은 PHP에서 Ajax 크로스 도메인 솔루션의 jsonp 예제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:jb51.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿