json과 jsonp가 무엇인지, jQuery json 예제는 자세히 설명되어 있습니다_json

WBOY
풀어 주다: 2016-05-16 17:46:53
원래의
1142명이 탐색했습니다.
JSON이란 무엇인가요?
앞서 간략히 언급했듯이 JSON은 텍스트 기반의 데이터 교환 방식인지, 데이터 설명 형식인지를 먼저 살펴봐야 합니다.

JSON의 장점:
1. 일반 텍스트를 기반으로 크로스 플랫폼 전송이 매우 간단합니다.
2. 거의 모든 배경 언어가 지원됩니다. ​지원됩니다.
3, 매우 적은 문자를 차지하는 경량 데이터 형식, 특히 인터넷 전송에 적합합니다.
4. XML만큼 명확하지는 않지만 가독성이 뛰어나지만 들여쓰기를 하면 여전히 쉽게 식별할 수 있습니다. ;
5. 물론 데이터 구조를 알면 작성하고 분석하기 쉽습니다.
JSON에는 확실히 단점이 있지만 저자의 의견으로는 그다지 중요하지 않으므로 별도로 설명하지 않겠습니다.

JSON 형식 또는 규칙 :
JSON은 XML이 할 수 있는 모든 작업을 매우 간단한 방식으로 설명할 수 있으므로 둘 다 완전히 구별할 수 없습니다.
1. JSON에는 두 개의 데이터 유형 설명자(중괄호 {} 및 대괄호 [])만 있습니다. 나머지 영어 콜론은 매핑 문자이고, 영어 쉼표는 구분 기호이며, 영어 큰따옴표 ""는 문자를 정의합니다.
2. 중괄호 {}는 "순서가 지정되지 않은 다양한 유형의 키-값 쌍 세트" 집합을 설명하는 데 사용되며(각 키-값 쌍은 OOP 속성 설명으로 이해될 수 있음) 대괄호 []가 사용됩니다. "동일한 유형의 정렬된 데이터 컬렉션"(OOP 배열에 해당할 수 있음) 집합을 설명합니다.
3. 위 두 세트에 하위 항목이 여러 개 있을 경우 쉼표로 구분해야 합니다.
4. 키-값 쌍은 영어 콜론:으로 구분되며, 다른 언어의 구문 분석을 용이하게 하기 위해 키 이름에 영어 큰따옴표 ""를 추가하는 것이 좋습니다.
5. JSON에서 일반적으로 사용되는 데이터 유형은 문자열, 숫자, 부울, 날짜 및 null뿐입니다. 문자열은 큰따옴표로 묶어야 하며 나머지는 사용되지 않습니다. 여기서는 자세히 다루지 않겠습니다. 예, 클라이언트에 날짜별 정렬 기능이 없으면 날짜와 시간을 문자열로 직접 전달하면 많은 문제를 줄일 수 있습니다.
JSON 인스턴스:
코드 복사 코드는 다음과 같습니다.

// 사람 설명
var person = {
"Name": "Bob",
"Age": 32,
"Company": "IBM",
" Engineer": true
}
// 이 사람의 정보 가져오기
var personAge = person.Age;
// 여러 사람 설명
varmembers = [
{
" 이름": "Bob",
"나이": 32,
"회사": "IBM",
"엔지니어": true
},
{
"이름" : " John",
"연령": 20,
"회사": "Oracle",
"엔지니어": false
},
{
"이름": " Henry" ,
"Age": 45,
"Company": "Microsoft",
"Engineer": false
}
]
// John의 회사 이름 읽기
var johnsCompany = 회원[1].회사
//컨퍼런스 설명
var conference = {
"컨퍼런스": "미래 마케팅",
"날짜": "2012-6 - 1",
"주소": "Beijing",
"멤버":
[
{
"이름": "Bob",
"나이": 32,
"회사": "IBM",
"엔지니어": true
},
{
"이름": "John",
"나이": 20,
"회사": "Oracle",
"엔지니어": false
},
{
"이름": "Henry",
"연령": 45,
" 회사 ": "Microsoft",
"Engineer": false
}
]
}
// 참가자 Henry가 엔지니어인지 여부 읽기
var henryIsAnEngineer = conference.Members[ 2 ].엔지니어


JSONP란?
사실 JSONP에 대한 설명은 인터넷에 많이 나와 있지만 다 똑같고 모호해서 처음 접하는 분들이 이해하기에는 좀 어려운 부분이 있는데요. 이 문제를 내 방식대로 설명해보세요. 도움이 되는지 확인해 보세요.
1. 잘 알려진 문제로, 일반 파일에 대한 Ajax 직접 요청은 정적 페이지, 동적 웹 페이지, 웹 서비스 또는 WCF인지 여부에 관계없이 도메인 간 무단 액세스 문제가 있습니다. 크로스 도메인 요청이므로 허용되지 않습니다.
2. 그러나 웹 페이지에서 js 파일을 호출할 때 크로스 도메인인지 여부에 영향을 받지 않는다는 점도 확인했습니다. "src" 속성이 있는 모든 태그에는 <script>, <img>, <iframe>)3을 사용하려는지 판단할 수 있습니다. 현재 단계의 순수 웹측(ActiveX 컨트롤, 서버측 프록시, 향후 HTML5 웹소켓 등은 포함되지 않음) 도메인 전체에 걸쳐 데이터에 액세스할 수 있는 방법은 단 하나뿐입니다. 즉, 데이터를 js로 로드하려고 시도하는 것입니다. 클라이언트 호출 및 추가 처리를 위한 원격 서버의 형식 파일 <br>4. 우리는 이미 순수한 JSON 파일이 있다는 것을 알고 있습니다. 문자 데이터 형식은 복잡한 데이터도 기본적으로 간결하게 설명할 수 있다는 것입니다. js에서 지원되므로 클라이언트는 거의 원하는 대로 이 형식의 데이터를 처리할 수 있습니다. <br> 5. 이렇게 하면 솔루션이 나올 준비가 됩니다. web 클라이언트는 동적으로 생성된 js 형식 파일(일반적으로 JSON을 사용하여)을 호출합니다. 서버가 JSON 파일을 동적으로 생성하는 이유는 클라이언트가 필요로 하는 데이터를 저장하기 위함임이 분명합니다. <br>6. 클라이언트는 JSON 파일을 성공적으로 호출한 후 필요한 데이터를 얻습니다. 나머지는 자체 요구 사항에 따라 처리하고 표시하는 것입니다. 원격 데이터를 얻는 방법은 AJAX와 매우 비슷하지만 실제로는 다릅니다. 동일하지 않습니다. <br>7. 클라이언트가 데이터를 쉽게 사용할 수 있도록 비공식 전송 프로토콜이 점차 형성되었습니다. 사람들은 이를 JSONP라고 부릅니다. 이 프로토콜의 핵심 중 하나는 사용자가 서버에 콜백 매개변수를 전달할 수 있다는 것입니다. 그런 다음 서버는 데이터를 반환합니다. 이 콜백 매개 변수는 JSON 데이터를 래핑하는 함수 이름으로 사용되므로 클라이언트는 반환된 데이터를 자동으로 처리하도록 자체 함수를 사용자 지정할 수 있습니다. <br>아직 콜백 매개변수 사용법이 조금 모호하신 분들은 나중에 구체적인 예시를 들어 설명드리겠습니다. <br><br><br>JSONP의 특정 클라이언트 구현<strong>: </strong>JQuery, extjs 또는 jsonp를 지원하는 기타 프레임워크 등 뒤에서 수행하는 작업은 동일합니다. 클라이언트에서 jsonp 단계별 구현: <br>1. 크로스 도메인 js 파일의 코드가 (물론 웹 스크립트 보안 정책을 준수하더라도) 웹 페이지는 무조건 실행될 수 있음을 알고 있습니다. . <br>remoteserver.com의 루트 디렉터리에 다음 코드가 포함된 remote.js 파일이 있습니다. <br><br><div class="codetitle"><span><a style="CURSOR: pointer" data="5077" class="copybut" id="copybut5077" onclick="doCopy('code5077')">코드 복사<u></u></a> 코드는 다음과 같습니다.</span></div> <div class="codebody" id="code5077">alert('나는 원격 파일입니다') <br><br> </div>로컬 서버 localserver.com에는 다음과 같은 jsonp.html 페이지 코드가 있습니다. : <br><br><div class="codetitle"><span><a style="CURSOR: pointer" data="83051" class="copybut" id="copybut83051" onclick="doCopy('code83051')">코드 복사<u></u></a> 코드는 다음과 같습니다.</span></div> <div class="codebody" id="code83051"><!DOCTYPE html PUBLIC "- //W3C//DTD XHTML 1.0 전환//EN " "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <br><html xmlns="http:/ /www.w3.org/1999/xhtml"&gt ; <BR><head> <br><제목></title> <br><script type="text/javascript" src="http: //remoteserver.com/remote.js"> </script>





의심할 여지 없이 페이지에 도메인 간 호출이 성공했음을 알리는 프롬프트 창이 나타납니다.

2. 이제 jsonp.html 페이지에서 함수를 정의한 다음, remote.js에 데이터를 전달하여 호출합니다.
jsonp.html 페이지 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다



;script type="text/javascript">
var localHandler = function(data){
alert('도메인 간 Remote.js 파일에서 호출할 수 있는 로컬 함수이며 가져온 데이터는 원격 js의 경우: ' data.result);








원격 .js 파일 코드는 다음과 같습니다.


코드 복사 코드는 다음과 같습니다. localHandler({"result":"I 원격 js에서 가져온 데이터입니다."})

실행 후 결과를 확인하면 페이지가 성공적으로 팝업되어 로컬이 표시됩니다. 함수가 교차 도메인 원격 js에 의해 성공적으로 호출되었으며 원격 js도 들어오는 데이터를 받았습니다. 도메인 간 원격 데이터 수집의 목적이 기본적으로 달성되어 매우 기쁩니다. 그러나 원격 js가 호출해야 하는 로컬 함수의 이름을 어떻게 알릴 수 있습니까? 결국 jsonp 서버는 많은 서비스 개체를 직면해야 하며 이러한 서비스 개체의 로컬 기능은 다릅니다. 아래를 살펴보자.
3. 똑똑한 개발자는 서버에서 제공하는 js 스크립트가 동적으로 생성되는 한 호출자가 서버에 "js 섹션에서 XXX 함수를 호출하고 싶다"고 알리는 매개변수를 전달할 수 있다고 쉽게 생각할 수 있습니다. 코드를 반환해주세요." 그러면 서버는 클라이언트의 필요에 따라 js 스크립트를 생성하고 응답할 수 있습니다.
jsonp.html 페이지의 코드를 보세요:



코드를 복사하세요 코드는 다음과 같습니다. < ;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns="http://www.w3.org/1999/xhtml">
;script type="text/ javascript">
// 항공편 정보 쿼리 결과를 얻은 후 콜백 함수
var flightHandler = function(data){
alert('쿼리하는 항공편 결과는 요금입니다. ' data.price ' yuan , ' 'Yipiao' data.tickets ' Zhang. ');
}
// jsonp 서비스의 URL 주소 제공(주소 유형에 관계없이 최종 반환 값) 자바스크립트 코드입니다)
var url = "http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998&callback=flightHandler"
// 스크립트 태그를 생성하고 해당 속성을 설정합니다
var script = document.createElement( 'script');
script.setAttribute('src', url);
// 헤드에 script 태그를 추가하면 호출이 시작됩니다.
document.getElementsByTagName ('head')[0].appendChild(스크립트)

/html>


이번에는 코드가 많이 변경되었습니다. 더 이상 원격 js 파일을 직접 작성하지 않고 동적 쿼리를 구현하는 코드이기도 합니다. 이 예제의 초점은 이를 완료하는 방법입니다. jsonp 호출의 전체 프로세스입니다.
코드 매개변수가 호출 URL에 전달되어 내가 확인하려는 것이 CA1998 항공편의 정보임을 서버에 알리고, 콜백 매개변수는 내 로컬 콜백 함수가 flightHandler라고 서버에 알리는 것을 볼 수 있습니다. 쿼리 결과를 전달합니다. 이 함수를 호출하세요.
자, 서버는 매우 똑똑합니다. flightResult.aspx라는 이 페이지는 이와 같은 코드 조각을 생성하여 jsonp.html에 제공합니다(서버측 구현은 여기서 설명하지 않습니다. 최종 분석에서는 문자열을 연결합니다. ):



코드 복사


코드는 다음과 같습니다. >
flightHandler({ "code": "CA1998", "price": 1780, "tickets": 5 });
flightHandler 함수에 전달되는 것이 비행의 기본 정보를 설명하는 json임을 알 수 있습니다. 페이지를 실행하면 프롬프트 창이 성공적으로 팝업되고 전체 jsonp 실행 프로세스가 성공적으로 완료됩니다!

4. 이제 jsonp의 클라이언트 구현 원리를 이해하셨겠죠? 남은 것은 사용자 인터페이스와 상호 작용하여 여러 번의 반복 호출을 수행할 수 있도록 코드를 캡슐화하는 방법입니다.
뭐? jQuery를 사용하고 있으며 jQuery가 jsonp 호출을 구현하는 방법을 알고 싶으십니까? 좋아요, 그러면 끝까지 끝내고 jsonp를 사용하는 또 다른 jQuery 코드를 제공하겠습니다. (우리는 반환된 jsonp 결과가 변경되지 않는다고 가정하고 위의 항공편 정보 쿼리 예제를 계속 사용합니다.):
코드 복사 코드는 다음과 같습니다.




제목 없는 페이지
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!