오늘날 인터넷에서 AJAX는 더 이상 낯선 단어가 아닙니다. AJAX라고 하면 RSS로 인해 등장한 XML이 바로 떠오를 수도 있다. XML 구문 분석은 아마도 더 이상 문제가 되지 않을 것입니다. 특히 PHP5와 가장 가벼운 SimpleXML과 같은 다수의 XML 구문 분석기의 등장에서는 더욱 그렇습니다. 그러나 AJAX의 경우 XML 구문 분석은 프런트 엔드 Javascript 지원에 더 가깝습니다. 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 = 배열(
'이름' => '첸 이신',
'닉' => '딥 스페이스',
'연락처' => 배열(
'이메일' => 'qq dot com의 shengong',
'웹사이트' => 'http://www.devdao.com',
)
);
$json_string = json_encode($arr);
에코 $json_string;
?> JSON 배열을 사용하는 것은 매우 간단합니다. UTF-8이 아닌 인코딩에서는 한자를 인코딩할 수 없으며 결과는 null이 됩니다. 따라서 gb2312를 사용하여 PHP 코드를 작성하는 경우 iconv 또는 mb를 사용하여 포함된 내용을 변환해야 합니다. 그런 다음 중국어를 UTF-8로 json_encoded하고 위의 출력 결과는 다음과 같습니다.
{"name":"u9648u6bc5u946b","nick":"u6df1u7a7a","연락처":{"email":"qq dot com의 shenkong","website":"http: ///www.devdao.com"}} 이미 직렬화와 매우 유사하다고 말씀드렸지만 아직도 믿지 않으시는군요. 인코딩 후에는 디코딩이 필요합니다. PHP는 해당 함수 json_decode를 제공합니다. json_decode가 실행되면 작업은 다음과 같습니다.
<?php
$arr = 배열(
'이름' => '첸 이신',
'닉' => '딥 스페이스',
'연락처' => 배열(
'이메일' => 'qq dot com의 shengong',
'웹사이트' => 'http://www.devdao.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 = (배열) $obj;
print_r($arr); PHP는 캐시 생성 외에 직접적으로 배열을 저장하는 것 같은 느낌이 들지만, 그 역할은 아래와 같습니다. Javascript를 사용하여 이 문자를 사용하려면:
<scrīpt type="텍스트/javascrīpt">
var arr = {"name":"u9648u6bc5u946b","nick":"u6df1u7a7a","contact":{"email":"qq dot com의 shenkong","website":" http://www.devdao.com"}};
경고(arr.name)
</scrīpt> 위에서 이 문자열을 변수에 직접 할당하면 Javascrīpt 배열이 됩니다. (전문 용어로는 배열이라고 부르면 안 되지만, PHP 습관상 편의상 그냥 배열이라고 부릅니다. 이해해주세요.) ). 이러한 방식으로 쉽게 arr을 탐색하거나 원하는 작업을 수행할 수 있습니다. 아직 AJAX에 대해서는 언급하지 않았죠? 예, 생각해 보세요. 서버에서 반환된 responseText가 XML 대신 JSON 문자열을 사용한다면 프런트 엔드 Javascrīpt가 이를 처리하는 것이 매우 편리하지 않을까요? 이것이 개 피부 석고가 사용되는 방법입니다.
사실 이 글을 쓰면서 데이터 저장 형식이 다른 점을 제외하면 JSON과 XML 사이에는 큰 차이가 없지만 아래에서 한 가지 언급하겠습니다. XML과는 거의 관련이 없지만 JSON의 광범위한 적용, 즉 도메인 간 데이터 호출을 설명할 수 있습니다. 보안 문제로 인해 AJAX는 도메인 간 호출을 지원하지 않습니다. 다른 도메인 이름으로 데이터를 호출하는 것은 매우 번거롭습니다. 해결책이 있지만(Stone은 강의에서 프록시를 언급했지만 이해하지는 못하지만 알고 있습니다) 해결될 것입니다). 저는 도메인 간 호출을 보여주기에 충분한 두 개의 파일을 작성했습니다.
기본 파일 index.html
<scrīpt type="text/javascrīpt">
함수 getProfile(str) {
var arr = str;
document.getElementById('nick').innerHTML = arr.nick;
}
</script>
<body><div id="nick"></div></body>
<scrīpt type="text/javascrīpt" src=" http://www.openphp.cn/demo/profile.php"></scrīpt > 조정된 파일 profile.php
<?php
$arr = 배열(
'이름' => '첸 이신',
'닉' => '딥 스페이스',
'연락처' => 배열(
'이메일' => 'qq dot com의 shengong',
'웹사이트' => 'http://www.devdao.com',
)
);
$json_string = json_encode($arr);
echo "getProfile($json_string)";
?> 당연히 index.html이 profile.php를 호출하면 JSON 문자열이 생성되어 getProfile에 매개변수로 전달된 다음 div에 닉네임이 삽입됩니다. 이렇게 하면 크로스 도메인 데이터 상호작용이 완료됩니다. 아주 간단하지 않나요? JSON은 매우 간단하고 사용하기 쉽기 때문에 무엇을 기다리고 계십니까?