프로그래밍 언어/jQuery, ajax

jQuery AJAX 교차 도메인

Rateye 2021. 6. 9. 10:30
728x90
반응형
질문 : jQuery AJAX 교차 도메인

다음은 test.php와 testserver.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);
?>

이제 내 문제 :이 두 파일이 동일한 서버 (localhost 또는 웹 서버)에 있으면 작동하고 alert("Success") 가 호출됩니다. 다른 서버에있는 경우 웹 서버의 testserver.php와 localhost의 test.php를 의미하며 작동하지 않으며 alert("Error") 가 실행 중입니다. ajax 내부의 URL이 http://domain.com/path/to/file/testserver.php로 변경된 경우에도

답변

JSONP를 사용하십시오.

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).");";
?>

에코가 잘못되었을 수 있습니다. PHP를 사용한 지 오래되었습니다. 어떤 경우 든 callbackName('jsonString') 을 출력해야한다면 따옴표를 확인하십시오. jQuery는 자체 콜백 이름을 전달하므로 GET 매개 변수에서 가져와야합니다.

Stefan Kendall이 게시 한대로 $ .getJSON () 'callback=?' 을 추가해야합니다. URL에 GET 매개 변수로 추가합니다 (예, 값은?, jQuery는이를 자체 생성 된 콜백 메서드로 대체합니다).

출처 : https://stackoverflow.com/questions/3506208/jquery-ajax-cross-domain
728x90
반응형