> 웹 프론트엔드 > JS 튜토리얼 > JSONP는 jQuery의 도메인 간 AJAX 통신 문제를 어떻게 해결할 수 있습니까?

JSONP는 jQuery의 도메인 간 AJAX 통신 문제를 어떻게 해결할 수 있습니까?

DDD
풀어 주다: 2024-12-22 18:40:10
원래의
506명이 탐색했습니다.

How Can JSONP Solve jQuery's Cross-Domain AJAX Communication Problems?

jQuery AJAX 도메인 간 통신 문제

한 도메인의 HTML 문서가 다른 도메인에 요청하면 어려움이 발생합니다. test.php와 testserver.php라는 두 개의 PHP 파일이 있는 시나리오를 살펴보겠습니다.

test.php:

<script src="scripts/jq.js" type="text/javascript"></script>
<script>
  $(function() {
    $.ajax({
      url: "testserver.php",
      success: function() {alert("Success")},
      error: function() {alert("Error")},
      dataType: "json",
      type: "get"
    });
  });
</script>
로그인 후 복사

testserver.php:

<?php
$arr = array("element1", "element2", array("element31", "element32"));
$arr['name'] = "response";
echo json_encode($arr);
?>
로그인 후 복사

두 파일이 모두 동일한 서버에서 호스팅되는 경우 AJAX 요청은 성공합니다. 그러나 다른 서버에 배치되면 요청이 실패하고 "오류" 경고가 발생합니다. 이는 도메인 간 데이터 공유를 제한하는 브라우저의 SOP(Same Origin Policy) 때문입니다.

해결책: JSONP 활용

SOP를 극복하려면 다음을 수행하세요. JSONP(JSON with Padding)를 사용합니다. JSONP를 사용하면 데이터를 함수 호출로 전송할 수 있으므로 SOP에 의해 부과된 제한 사항을 피할 수 있습니다.

jQuery:

$.ajax({
  url: "testserver.php",
  dataType: 'jsonp', // Notice! JSONP < - P (lowercase)
  success: function(json){
    // do stuff with json (in this case an array)
    alert("Success");
  },
  error: function(){
    alert("Error");
  }
});
로그인 후 복사

PHP:

<?php
$arr = array("element1", "element2", array("element31", "element32"));
$arr['name'] = "response";
echo $_GET['callback'] . "(" . json_encode($arr) . ");";
?>
로그인 후 복사

이 수정된 코드에서 JavaScript 요청에는 'dataType: JSONP 사용을 나타내는 'jsonp''입니다. PHP 스크립트는 '$_GET['callback']'을 통해 jQuery가 보낸 콜백 함수 이름을 검색하고 이를 사용하여 출력을 형성합니다. PHP 스크립트의 출력은 콜백 함수와 JSON 데이터로 나타나야 데이터가 함수 호출로 전송되도록 할 수 있습니다.

또는 jQuery는 처리를 위한 약칭인 $.getJSON() 메서드를 제공합니다. JSONP 요청. 그러나 'callback=?'을 포함하는 URL이 필요합니다. GET 매개변수로, jQuery가 자체 콜백 메소드를 동적으로 삽입합니다.

위 내용은 JSONP는 jQuery의 도메인 간 AJAX 통신 문제를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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