사실 JSONP에 대한 설명은 인터넷에 많이 나와 있지만 다 똑같고 모호해서 처음 접하는 분들이 이해하기에는 조금 어려운 부분이 있는데, 이 문제를 내 방식대로 설명해보세요. 도움이 되나요? 이 기사에서는 모든 사람에게 도움이 되기를 바라며 Ajax 크로스 도메인 문제에 대한 PHP 분석을 주로 공유합니다.
1. 잘 알려진 문제는 일반 파일에 대한 직접 Ajax 요청에는 정적 페이지, 동적 웹 페이지, 웹 서비스 또는 WCF인지 여부에 관계없이 도메인 간 무단 액세스 문제가 있다는 것입니다.
2. 그러나 웹 페이지에서 js 파일을 호출할 때 도메인 간 요청인지 여부에 영향을 받지 않는다는 것도 발견했습니다. "src" 속성이 있는 모든 태그에는 3f1c4e4b6b16bbbd69b2ee476dc4f83a, a1f02c36ba31691bcfe87b2722de723b, d5ba1642137c3f32f4f4493ae923989c
3과 같은 도메인 간 기능이 있음을 확인했습니다. 순수 웹 측을 통해 크로스 도메인에 액세스하려는 경우(ActiveX 컨트롤, 서버 프록시, 향후 HTML5의 Websocket 등은 포함되지 않음) 데이터에 대한 가능성은 단 하나뿐입니다. 즉, 데이터를 js 형식으로 로드하려고 시도하는 것입니다.
4. 복잡한 데이터를 간결하게 설명할 수 있는 JSON이라는 순수 문자 데이터 형식이 있다는 것을 이미 알고 있습니다. 더 좋은 점은 JSON도 기본적으로 지원된다는 것입니다.
5. 이렇게 하면 솔루션이 준비되고 웹 클라이언트가 이를 호출할 수 있습니다. 스크립트는 동적으로 생성된 js 형식을 호출하는 것과 정확히 동일한 방법을 사용합니다. 서버가 JSON 파일을 동적으로 생성하는 이유는 클라이언트에 필요한 데이터를 로드하기 위한 것임이 분명합니다.
6. 클라이언트가 JSON 파일을 성공적으로 호출한 후에는 필요한 데이터를 처리하고 표시합니다. 그러나 원격 데이터를 얻는 방법은 AJAX와 매우 유사합니다. 동일합니다.
7. 클라이언트가 데이터를 쉽게 사용할 수 있도록 비공식 전송 프로토콜이 점차 형성되었습니다. 사람들은 이를 JSONP라고 부릅니다. 이 프로토콜의 핵심 포인트 중 하나는 사용자가 서버에 콜백 매개변수를 전달할 수 있도록 하는 것입니다. 서버는 데이터를 반환합니다. 이 콜백 매개변수는 JSON 데이터를 래핑하는 함수 이름으로 사용되므로 클라이언트는 반환된 데이터를 자동으로 처리하도록 자체 함수를 사용자 지정할 수 있습니다.
프런트 엔드 코드의 원래 ajax는
$.ajax({ type: "get", async: false, url: "url", dataType: "json", success: function(json){ alert('success'); }, error: function(){ alert('fail'); } });
이며
$.ajax({ type: "get", async: false, url: "url", dataType: "jsonp", jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback) jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据 success: function(json){ alert('success'); }, error: function(){ alert('fail'); } });
json과 jsonp 형식
{ "message":"获取成功", "state":"1", "result":{"name":"工作组1","id":1,"description":"11"} }
callback({ "message":"获取成功", "state":"1", "result":{"name":"工作组1","id":1,"description":"11"} })
URL에서 백그라운드로 전달되는 콜백의 매개변수는 Shenma입니다. jsonp는 json인 callback()보다 하나 더 많은 레이어를 가지고 있습니다. 그래서 당신은 그것을 다루는 방법을 알고 있습니다. 따라서 배경 코드를 수정하십시오.
따라서 PHP의 원래 echo json_encode($xxx)는
$callback = $_GET['callback'];echo $callback.'('.json_encode($xxx).')';
로 변경되어야 합니다. 관련 권장 사항:
Ajax 교차 도메인 솔루션에 대한 가장 포괄적인 솔루션
JS는 Ajax 도메인 간 요청 플라스크 응답 콘텐츠를 구현합니다
위 내용은 Ajax 도메인 간 문제에 대한 PHP 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!