장면
B.com/b_return_js.php 인터페이스에 도메인 이름이 다른 두 개의 서버가있는 경우 일부 데이터를 얻을 수 있습니다. 물론 B.com 페이지에있는 경우 Ajax를 사용 하여이 인터페이스를 직접 요청할 수 있지만 A.com 페이지에 요청 된 경우 어떻게해야합니까?
b_return_js.php의 인터페이스 코드 :
코드 사본은 다음과 같습니다.
$ a = 배열 (
배열 ( 'username'=> 'tony', 'age'=> 25),
배열 ( 'username'=> 'yimeng', 'age'=> 23),
배열 ( 'username'=> 'ermeng', 'age'=> 22),
배열 ( 'username'=> 'sanmeng', 'age'=> 21),
);
셔플 ($ a);
echo 'var userData ='.json_encode ($ a). ';'; // 일반적으로 B.com의 사이트 요청 인 경우 JSON_ENCODE ($ A)를 직접 반환합니다. 그러나 SRC 속성을 사용하여 크로스 도메인을 달성하려면 여기 에서이 값을 JS 변수에 할당하여 스크립트 태그로로드 된 페이지 에서이 데이터를 얻고 사용할 수 있는지 확인해야합니다.
간단한 구현
A.com에서 페이지를 직접 이동하는 쉬운 방법이 있습니다.
코드 사본은 다음과 같습니다.
<script src = "http://b.com/b_return_js.php"> </script>
이러한 방식 으로이 인터페이스에서 반환 된 데이터는 A.com 페이지에서 직접 얻을 수 있습니다.
그러나 여기에는 결함이 있습니다. 이 데이터는 페이지가로드 된 경우에만 얻을 수 있습니다. AJAX를 사용하려면 언제든지 새로운 인터페이스 데이터를 얻을 수있는 방법이 그다지 적합하지 않습니다. 예를 들어,이 인터페이스에서 부분적으로 새로 고침 된 데이터를 얻기 위해 버튼을 클릭하면이 메소드가 다소 부적절합니다.
클래스 Ajax 구현
실제로, 위에서 언급 한 Ajax 클래스를 구현한다는 아이디어는 Ajax 조건이 트리거 될 때 위의 태그를 재생하여 인터페이스로부터 다시 얻을 수 있도록하는 것입니다. 그러나 실제로 구현하기가 여전히 어렵습니다 (적어도 나에게 많은 노력이 필요했습니다).
코드 :
a.com/scriptsrc.php 페이지 아래에 버튼이있는 경우
<입력 유형 = "버튼"id = "ajax_request_from_b"value = "b.com의 요청"/>
각 클릭은 Ajax 구현 코드와 유사한 B.com/b_return_js.php 인터페이스에서 데이터를 얻습니다.
코드 사본은 다음과 같습니다.
함수 createScript ()
{
//console.log(ele);
ele.src = 'http://b.com/b_return_js.php';
ele.type = 'text/javaScript';
ele.language = 'JavaScript';
}
함수 getData ()
{
Console.log (userData);
}
$ ( '#ajax_request_from_b'). 클릭 (function () {
// 스크립트 태그를 매번 다시로드해야하므로 크로스 도메인 서버에서 데이터를 얻을 수 있도록 새 스크립트 태그를 매번 재생해야합니다.
if (ele && ele.parentNode)
{
//ele.parentNode.RemoveChild(ELE); // 이런 종류의 삭제는 메모리에서 ELE을 완전히 삭제할 수 없지만 DOM의 위치 만 제거합니다.
for (var in ele) {
ELE [속성] 삭제; // 완전히 삭제합니다
}
}
ele = document.createelement ( '스크립트'); // 이것은 새로운 엘입니다
createScript ();
document.getElementsByTagName ( "Head") [0] .AppendChild (ELE);
ele.onload = function () {getData ()}; // 스크립트 요소가로드 된 후 userData를 얻을 수 있습니다. 사용자 정보가 임의 순서로 얻을 때마다.
});
이런 식으로 버튼을 클릭 할 때마다 인터페이스에서 데이터를 다시 얻을 수 있으며 효과는 AJAX와 유사하지만 JS의 크로스 도메인 방법입니다. 조금 감사하지만 여전히 사고 방식입니다.