JavaScript

[JSON] JS - JSON - JSONP (= script 이용한 서버연동)

목차
  1. JSONP 소개
  2. JSONP 예제1 - 페이지 로드 시 자동출력
  3. JSONP 예제2 - 버튼 클릭했을 때만 출력
  4. JSONP 예제3 - 버튼 클릭했을 때만 출력 (서버DB 연결)
  5. [참고] 배열키 결정 방법

 

JSONP 소개 

 

도메인 간 생기는 문제 걱정 없이 JSON 데이터 전송하는 방법.

 


 

1.

데이터 전송에 <script> 태그 사용. (※ XMLHttpRequest 객체 사용 X)
(예)  <script src="a.php"></script>

2.
JSONP (=JSON + Padding) = 패딩 있는 JSON

 

3.

다른 도메인의 파일을 요청하면 도메인 간 정책으로 인해 문제가 발생 가능.

그러나, 다른 도메인에서 외부 script  요청하는 데는 문제 발생 안 함.

이 점에 착안해,
JSONP는 XMLHttpRequest 객체 대신 script 태그를 사용해서 파일 요청.

 

 

JSONP 예제1 - 페이지 로드 시 자동출력

b.php (브라우저 출력)

 

<p id="demo"></p>


<script>

function myFunc(myObj) {

  document.getElementById("demo").innerHTML = myObj.site;

}

</script>


<script src="a.php"></script>

 

PS. 이 방법은 페이지 로드 중 함수를 실행해서 바람직 안 함.


a.php (서버 처리)

 

<?php

$myJSON = '{ "site":"홈짱닷컴", "domain":"Homzzang.com", "open":2012 }';

echo "myFunc(".$myJSON.");";

?>



JSONP 예제2 - 버튼 클릭했을 때만 출력

 

b.php (브라우저 출력)

 

<button onclick="clickButton()">클릭</button>


<p id="demo"></p>


<script>

function clickButton() {

  var s = document.createElement("script");

  s.src = "a.php";

  document.body.appendChild(s);

}


function myFunc(myObj) {

  document.getElementById("demo").innerHTML = myObj.site;

}

</script>

 

PS. 이 방법은 필요할 때 함수를 호출해 실행하므로 바람직.


a.php (서버 처리)

 

앞 예제와 동일. 

 


JSONP 예제3 - 버튼 클릭했을 때만 출력 (서버DB 연결)

b.php (브라우저측)

 

<button onclick="btn()">클릭</button>


<p id="demo"></p>


<script>

function btn() {

  var obj, s

  obj = { limit: 10 };

  s = document.createElement("script");

  s.src = "a.php?x=" + JSON.stringify(obj); // JS 객체를 JSON 객체로 변환

  document.body.appendChild(s);

}


function myFunc(myObj) {

  var x, txt = "";

  for (x in myObj) {

    txt += myObj[x].mb_name + "<br>";

  }

  document.getElementById("demo").innerHTML = txt;

}

</script>

 


a.php (서버측)

 

<?php

header("Content-Type: application/json; charset=UTF-8");

 

$obj = json_decode($_GET["x"], false);
 // JSON 요청을 PHP 객체로 변환

$conn = new mysqli("localhost", "root", "autoset", "mw7"); 
// 서버 DB 연결 (호스트, ID, PW, DB명)

 

$result = $conn->query("SELECT mb_name FROM g5_member LIMIT ".$obj->limit);

$outp = array();

$outp = $result->fetch_all(MYSQLI_ASSOC); 
// 필드명을 배열키로 사용

echo "myFunc(".json_encode($outp).")"; 
// PHP 배열을 JSON으로 변환

?>

 

[주의] 워삼스쿨 경우, $limit 변수로 되어 있는데 그냥 limit로 적어야 됨.

  

[참고] 배열키 결정 방법

 

MYSQLI_ASSOC : 필드명을 배열키로 사용

MYSQLI_NUM : 숫자를 배열키로 사용

MYSQLI_BOTH: 필드명과 숫자 모두 배열키로 사용

 


방문 감사합니다. (즐겨찾기 등록: Ctrl + D)

분류 제목
JSON JS - JSON - JSON.stringify() 함수 ★ - (JS객체 → JSON문자열) 변환. ※ P…
JSON JS - JSON - PHP (= 서버연동 = DB연동)
JSON JS - JSON - HTML (= 테이블 및 드롭다운 형태로 출력 + 출력개수선택)
JSON JS - JSON - JSONP (= script 이용한 서버연동)
String JS - String - 문자열
String JS - constructor 속성 - 객체생성자함수반환. (문자열 경우)
String JS - length 속성 ★ - 문자열길이 반환 (= length속성 = 렝스속성) ※ 문자개수/텍스트길이…
String JS - prototype 속성(문자열) - 객체에 사용자정의 속성 및 메서드 추가 (프로토타입)
String JS - charAt() 메서드 ★ - 문자열의 지정 위치 문자. (= charAt메서드) ※ 개별문자에 스…
String JS - charCodeAt() 메서드 - 문자열의 지정위치문자의 유니코드 (= charCodeAt메서드 =…
String JS - concat() 메서드 ★ - 문자열결합 (= 문자열합치기 = concat메서드 = 컨캣메서드)
String JS - endsWith() 메서드 - 지정문자열로 끝나는지(=종료) 여부 (IE12이상)
String JS - fromCharCode() 메서드 - 유니코드를 문자열로 변환
String JS - includes() 메서드 ★ - 지정문자열포함여부 (= includes메서드 = 인클루드즈메서드)
String JS - indexOf() 메서드(문자열) ★ - 처음일치문자열위치찾기 (= 문자열포함검사 = 인덱스어브메서…
7/89
목록
  • 채팅방
  • 필독
1. 채팅창 헤드에서 접속자 확인 2. 닉네임 클릭해 1:1 채팅 가능 3. 닉네임 클릭해 귓속말 가능 4. 닉네임 클릭해 호출하기 가능 5. 우하단 클릭해 환경 설정 가능 6. 의뢰글 작성 후 의뢰 상담 가능 7. 질문글 작성 후 질문 상담 가능 8. 채팅방에 개인정보 입력 금지 9. 채팅방에 광고 욕설 비방 금지
 홈  PC버전 로그인 일본어
웹디자인언어
서버관리언어
고급코딩언어
그누보드
제작의뢰
Q&A
커뮤니티
웹유틸
회원센터
홈짱 PC버전 로그인