오늘날 인터넷에서 AJAX는 더 이상 낯선 단어가 아닙니다. AJAX라고 하면 RSS로 인해 등장한 XML이 바로 떠오를 수도 있다. XML이 매우 좋은 데이터 저장 방법이라는 것은 부인할 수 없지만 XML의 유연성으로 인해 구문 분석이 어렵습니다. 물론 여기서 언급한 어려움은 이 글의 주인공인 JSON과 관련된 것이다.
JSON이란 무엇입니까? 나는 그 개념을 반복하지 않을 것이다. 일반인의 관점에서 보면 이는 PHP 직렬 문자열과 같은 데이터 저장 형식입니다. 데이터 설명입니다. 예를 들어 배열을 직렬화하여 저장하면 쉽게 역직렬화하고 적용할 수 있습니다. 클라이언트 측 Javascript와 서버 측 PHP 사이에 대화형 브리지를 구축한다는 점을 제외하면 JSON의 경우에도 마찬가지입니다. 우리는 PHP를 사용하여 JSON 문자열을 생성한 다음 이 문자열을 프런트 엔드 Javascript에 전달합니다. Javascirpt는 이를 JSON으로 쉽게 변환한 다음 적용할 수 있습니다. 간단히 말해서 실제로는 배열처럼 보입니다.
집에서 더 가까운 곳, JSON을 활용하는 방법. PHP5.2에는 JSON에 대한 지원이 내장되어 있습니다. 물론, 이 버전보다 낮은 경우에는 시중에 많은 PHP 버전 구현이 있으므로 원하는 버전을 사용하세요. 이제 우리는 주로 PHP의 JSON 내장 지원에 대해 이야기합니다. 매우 간단하고 두 가지 함수: json_encode 및 json_decode(직렬화와 매우 유사) 하나는 인코딩용이고 하나는 디코딩용입니다. 먼저 인코딩 사용법을 살펴보겠습니다.
<?php $arr = array( 'name' => '陈毅鑫', 'nick' => '深空', 'contact' => array( 'email' => 'shenkong at qq dot com', 'website' => 'http://www.chinaz.com', ) ); $json_string = json_encode($arr); echo $json_string; ?>
JSON 배열은 매우 간단합니다. UTF-8이 아닌 인코딩에서는 한자를 인코딩할 수 없으며 결과는 null이 됩니다. 따라서 gb2312를 사용하여 PHP 코드를 작성하는 경우 iconv 또는 mb를 사용하여 포함된 내용을 변환해야 합니다. 그런 다음 중국어를 UTF-8로 json_encoded하고 위의 출력 결과는 다음과 같습니다.
{"name":"\u9648\u6bc5\u946b","nick":"\u6df1\u7a7a", "contact":{"email":"shenkong at qq dot com","website":"http:\/\/www.chinaz.com"}}
연재와 매우 유사하다고 말씀드렸는데 아직도 믿기지 않으시죠? 인코딩 후에는 디코딩이 필요합니다. PHP는 해당 함수 json_decode를 제공합니다. json_decode가 실행되면 작업은 다음과 같습니다.
<?php $arr = array( 'name' => '陈毅鑫', 'nick' => '深空', 'contact' => array( 'email' => 'shenkong at qq dot com', 'website' => 'http://www.chinaz.com', ) ); $json_string = json_encode($arr); $obj = json_decode($json_string); print_r($obj); ?>
객체 내의 속성에 액세스할 수 있나요? $obj->name은 물론 쉽게 호출할 수 있도록 배열로 변환할 수도 있습니다.
$json_string = json_encode($arr); $obj = json_decode($json_string); $arr = array($obj); print_r($arr);
PHP는 캐시 생성 외에 배열을 직접 저장하는 것이 더 나은 것처럼 느껴집니다. 그러나 프런트 데스크와 상호 작용할 때 그 역할을 살펴보겠습니다. Javascript를 사용하는 방법:
<script type="text/javascript"> var arr = {"name":"\u9648\u6bc5\u946b","nick":"\u6df1\u7a7a", "contact":{"email":"shenkong at qq dot com","website":"http:\/\/www.chinaz.com"}}; alert(arr.name) </script>
위에서 이 문자열을 변수에 직접 할당하면 자바스크립트 배열이 됩니다. (전문용어에서는 배열이라고 부르면 안 되지만, PHP의 습관상 이해를 돕기 위해 항상 배열이라고 부르겠습니다.) ). 이러한 방식으로 쉽게 arr을 탐색하거나 원하는 작업을 수행할 수 있습니다. 아직 AJAX에 대해서는 언급하지 않았죠? 예, 생각해 보세요. 서버에서 반환된 responseText가 XML 대신 JSON 문자열을 사용한다면 프런트 엔드 Javascript가 이를 처리하는 것이 매우 편리하지 않을까요? 이것이 개 피부 석고가 사용되는 방법입니다.
사실 이 글을 쓰면서 데이터 저장 형식이 다른 점을 제외하면 JSON과 XML 사이에는 큰 차이가 없지만, 아래에서 언급할 점이 하나 있습니다. XML과 관련이 거의 없지만 JSON의 광범위한 적용, 즉 도메인 간 데이터 호출을 설명할 수 있습니다. 보안 문제로 인해 AJAX는 도메인 간 호출을 지원하지 않습니다. 다른 도메인 이름으로 데이터를 호출하는 것은 매우 번거롭습니다. 해결책이 있지만(Stone은 강의에서 프록시를 언급했지만 이해하지는 못하지만 알고 있습니다) 해결될 것입니다). 저는 도메인 간 호출을 보여주기에 충분한 두 개의 파일을 작성했습니다.
메인 파일 index.html
<script type="text/javascript"> function getProfile(str) { var arr = str; document.getElementById('nick').innerHTML = arr.nick; } </script> <body><div id="nick"></div></body> <script type="text/javascript" src="http://www.openphp.cn/demo/profile.php"></script>
조정된 파일 profile.php
<?php $arr = array( 'name' => '陈毅鑫', 'nick' => '深空', 'contact' => array( 'email' => 'shenkong at qq dot com', 'website' => 'http://www.chinaz.com', ) ); $json_string = json_encode($arr); echo "getProfile($json_string)"; ?>
분명히 index.html이 profile.php를 호출하면 JSON 문자열이 생성되어 getProfile에 매개변수로 전달된 다음 닉네임이 div에 삽입됩니다. 이렇게 하면 크로스 도메인 데이터 상호작용이 완료됩니다. 아주 간단하지 않나요?
JSON은 매우 간단하고 사용하기 쉬운데 무엇을 기다리고 계십니까? 이 글이 모든 분들의 공부에 도움이 되기를 바랍니다.