AJAX 크로스 도 메 인 을 실현 하 는 세 가지 방법(대리,JSONP,XHR 2)
작업 중 AJAX 를 사용 해 다른 도 메 인 이름 의 요청 을 요청 해 야 하지만,접근 을 거부 하 는 경우 가 발생 하 는데,이 는 안전 을 고려 해 AJAX 가 로 컬 자원 에 만 접근 할 수 있 고,도 메 인 을 넘 어 접근 할 수 없 기 때문이다.
예 를 들 어 당신 의 사이트 도 메 인 이름 은 aaa.com 입 니 다.AJAX 를 통 해 bb.com 도 메 인 이름 의 내용 을 요청 하려 면 브 라 우 저 는 안전 하지 않다 고 생각 하기 때문에 방문 을 거부 합 니 다.
크로스 필드 문제 가 발생 할 수 있 는 몇 가지 상황:
백 스테이지 에서 바 이 두 에서 해결 방안 을 찾 아 이 문 제 를 해결 했다.모두 세 가지 방안 을 정리 했다.대리,JSONP,XHR 2(XML Http Request Level 2).
첫 번 째 방법 에이전트:배경(ASP,PHP,JAVA,ASP.NET)을 통 해 다른 도 메 인 이름 의 내용 을 가 져 온 다음 에 얻 은 내용 을 전단 으로 되 돌려 주 는 방식 입 니 다.같은 도 메 인 이름 아래 있 기 때문에 도 메 인 을 뛰 어 넘 는 문제 가 발생 하지 않 습 니 다.
구현 코드:AJAX 요청 만 들 기(페이지 주소:http://localhost/ajax/proxy.html)
var request = null;
if(window.XMLHttpRequest){
request = new XMLHttpRequest();
}else{
request = new ActiveXObject("Microsoft.XMLHttp");
}
request.onreadystatechange = function(){
console.log(this.readyState);
if(this.readyState===4 && this.status===200){
var resultObj = eval("("+this.responseText+")"); // JSON
document.getElementById("box").innerHTML = resultObj.name+":"+resultObj.sex; //
}
}
request.open("POST","proxy.php",true);
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
request.send("name= &sex= ");
AJAX 생 성 요청.proxy.php 코드
header("Content-type:text/html;charset=utf-8");
$url = "http://localhost:63342/ajax/proxy.js";
$contents = file_get_contents($url);
echo $contents;
php 코드 를 사용 하여 localhost:63342 의 proxy.js 파일 을 가 져 옵 니 다.proxy.js 코드
{
name : " ",
sex : " "
}
proxy.html 실행 결과이로써 프 록 시 를 사용 하여 서로 다른 도 메 인 간 의 파일 을 방문 하 였 습 니 다.
먼저 proxy.html 에서 AJAX 를 사용 하여 배경 에 있 는 proxy.php 파일 을 방문 한 다음 proxy.php 가 요청 을 받 은 후 localhost:63342 에 있 는 proxy.js 파일 을 방문 하여 proxy.js 의 내용 을 가 져 온 후 내용 을 전단 페이지 로 되 돌려 주 는 것 이 도 메 인 을 뛰 어 넘 는 기능 을 실현 합 니 다.
여러 개의 크로스 필드 파일 에 접근 하려 면 배경 proxy.phop 파일 이 접근 할 파일 의 주 소 를 매개 변수 로 알려 줄 수 있 습 니 다.
두 번 째 방법 JSONP(GET 요청 만 지원):나중에 사람들 은 JS 파일 을 호출 할 때 도 메 인 간 의 영향 을 받 지 않 고 두 번 째 방안 이 파생 된 것 을 발견 했다.
원 격 서버 에서 데 이 터 를 js 파일 에 불 러 와 클 라 이언 트 가 호출 하고 처리 할 수 있 도록 하 는 것 입 니 다.
jsonp.html
var url = "http://localhost:63342/ajax/jsonp.php?name= &sex= &callbackname=jsonp_callback"; // localhost:63342 jsonp.php
var scriptTag = document.createElement("script"); // script
scriptTag.setAttribute("src",url); // script src
document.body.appendChild(scriptTag); // script body
//
var jsonp_callback = function(resultObj){
document.getElementById("box").innerHTML = resultObj.name+":"+resultObj.sex;
}
jsonp.php
$name = $_GET["name"];
$sex = $_GET["sex"];
$callbackname = $_GET["callbackname"]; //
echo "$callbackname({name:'$name',sex:'$sex'})";
jsonp.html 실행 결과:실현 원리:script 탭 을 사용 하여 원 격 js 파일 을 호출 하 는 것 은 크로스 필드 의 영향 을 받 지 않 기 때문에 script 탭 을 만 들 고 src 속성 을 통 해 원 격 파일 에 접근 할 수 있 습 니 다.
사실 이것 은 AJAX 에 속 하 지 는 않 지만 AJAX 와 유사 한 기능 을 실현 할 수 있다.
세 번 째 방법 XML HttpRequest Level 2:HTML 5 가 제공 하 는 XML HttpRequest Level 2 는 도 메 인 접근 및 기타 새로운 기능 을 실현 하 였 습 니 다.
원 격 서버 에 다음 코드 를 추가 해 야 합 니 다.
header('Access-Control-Allow-Origin:*'); //* ,
header('Access-Control-Allow-Methods:POST,GET');
이렇게 클 라 이언 트 에서 일반적인 AJAX 코드 를 사용 하면 됩 니 다.요약:프 록 시 구현 이 가장 번 거 롭 지만 가장 광범 위 하 게 사용 되 며,AJAX 를 지원 하 는 모든 브 라 우 저 는 이런 방식 을 사용 할 수 있 습 니 다.
JSONP 는 상대 적 으로 간단 하지만 GET 방식 호출 만 지원 합 니 다.
XHR 2 는 가장 간단 하지만 HTML 5 만 지원 합 니 다.모 바 일 개발 이 라면 XHR 2 를 선택 할 수 있 습 니 다.
위 에서 말 한 것 은 편집장 이 소개 한 AJAX 가 도 메 인 을 뛰 어 넘 는 세 가지 방법(대리,JSONP,XHR 2)입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Javascript Ajax에 대한 간단한 연습저는 약 4년 동안 프로그래밍 개인 튜터로 일한 경험이 있습니다. 약 5년 전에 " "이라는 제목의 페르시아어로 내 웹사이트에 블로그 게시물을 올렸고 사람들이 저에게 전화하기 시작했습니다. 나는 항상 사람들을 가르치...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.