이 문서에서는 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['callback']) ? trim($_GET['callback']) : ''; if(!empty($callback)) { $data = json_encode(array( 'uid' => 1, 'name' => '测试', )); 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>
도메인 간 정책 제한 표는 다음과 같습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!