집 >백엔드 개발 >XML/RSS 튜토리얼 >JSON 및 XML을 구문 분석하는 JavaScript 샘플 코드에 대한 자세한 소개
AJAX를 작성할 때 서버에서 반환된 문자열을 구문 분석해야 하는 경우가 종종 있습니다. 다음은 서버에서 반환되는 두 가지 문자 형식과 JS가 이를 구문 분석하는 방법에 대한 간략한 소개입니다.
1. JSON
JS Object Notation(JavaScript Object Notation)인데, JS가 객체를 선언하는 방식으로 문자열을 조합한 것입니다.
JS는 다음과 같은 방식으로 객체를 정의할 수 있습니다:
var obj = { id: 2 , name: ' n ' };
이러한 방식으로 객체 obj가 정의되며, 여기에는 두 개의 공개 속성 ID가 있습니다. 해당 속성 값은 obj.id를 사용하여 직접 액세스할 수 있습니다.
서버에서 데이터를 가져올 때 개체 배열을 사용해야 하는 개체가 두 개 이상인 경우가 많습니다. JS의 개체 배열은 다음과 같이 []로 정의할 수 있습니다.
var objs = [{ id: 1 , name: ' n_1 ' }, { id: 2 , name: ' n_2 ' }]; alert(objs[ 0 ].id);
이는 두 개의 개체를 포함하고 인덱스를 사용하여 액세스할 수 있는 개체 배열 objs를 정의합니다. 예를 들어 objs[0]은 첫 번째 개체를 참조합니다.
이 시점에서 서버가 반환하는 문자열의 형식에 대해 생각해 보셨겠지만, 문자열은 결국 문자열이므로 JS에서 조작할 수 있는 변수로 변환해야 합니다.
eval 함수를 사용합니다. 다음 예를 참조하세요.
var objs = eval( " [{ id: 1, name: 'n_1' }, { id: 2, name: 'n_2'}] " ); alert(objs[ 0 ].id); // return 1
서버 측에서는 형식만 지정하면 됩니다. [{ id : 1, name: 'n_1' }, { id: 2, name: 'n_2'}] 문자열을 반환합니다.
클라이언트 측에서는 eval()을 사용하여 반환된 문자열을 실행하고 얻을 수 있습니다. 객체 배열.
다음은 AJAX를 사용한 간단한 예제입니다. 새 웹 사이트를 만들고 루트 디렉터리에 일반 처리기(GetJson.ashx)를 추가합니다. 코드는 다음과 같습니다.
GetJson.ashx
在Default.aspx 文件中添加测试脚本:
< script type = " text/javascript " > function getJson() { // 在IE7下测试通过,IE6下必须创建 new ActiveXObject("MSXML2.XMLHTTP.6.0") var request = new XMLHttpRequest(); request.open( ' GET ' , ' GetJson.ashx ' ); request.onreadystatechange = function () { if (request.readyState == 4 && request.status == 200 ) { var objs = eval(request.responseText); alert(objs.length); // 2 alert(objs[ 0 ].id); // 1 alert(objs[ 1 ].name); // 'n_2' } } request.send( null ); } < / script>
再添加一个测试按钮即可以看到效果:
<input type="button" value="GetJson" onclick="getJson();" />
二、XML
JS对XML的解析是基于DOM的,对HTML的DOM熟悉的话,解析XML就没什么困难了。
注意:在Firefox中,解析器不会忽略空格,所以元素间的空格,FF一样会认为是一个节点。
不过在我们用程序拼接XML的时候,一般不会出现节点间有空格的情况。
在根目录下添加一个新的一般处理程序(GetXml.ashx),代码如下:
在Default.aspx页面添加以下脚本:
function getXml() { // 在IE7下测试通过,IE6下必须创建 new ActiveXObject("MSXML2.XMLHTTP.6.0") var request = new XMLHttpRequest(); request.open( ' GET ' , ' GetXml.ashx ' ); request.onreadystatechange = function () { if (request.readyState == 4 && request.status == 200 ) { var xmlDoc = request.responseXML; var root = xmlDoc.documentElement; var elements = root.getElementsByTagName( " Person " ); alert(elements.length); // 2 // elements[0].firstChild 引用到第一个Person节点的Id节点 // elements[0].firstChild.firstChild 引用到Id节点的文本节点 // 因为文本节点是元素节点的第一个子节点 alert(elements[ 0 ].firstChild.firstChild.nodeValue); // 1 alert(elements[ 1 ].lastChild.firstChild.nodeValue); // 'n_2' } } request.send( null ); }
注意到代码段:var root = xmlDoc.documentElement;
主要是为了消除IE6和其他浏览器的兼容问题,在其他浏览器下,允许request.responseXML.getElementsByTagName("Person");
添加测试按钮:
<input type="button" value="GetXml" onclick="getXml();" />
总结:从代码上很容易看出,解析JSON相对直观,在网络中需要传输的字符串也比较少,解析过程中也不需要考虑浏览器兼容问题。
但JSON比较适合轻量级的数据交互,XML则比JSON多了一些特性,比如命名空间,还有更多的节点类型。
위 내용은 JSON 및 XML을 구문 분석하는 JavaScript 샘플 코드에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!