AJAX を作成する場合、サーバーから返される文字列を解析する必要があることがよくあります。ここでは、サーバーから返される 2 つの文字形式と、JS がそれらを解析する方法について簡単に説明します。
1. JSON
それがJSオブジェクト記法(JavaScript Object Notation)で、JSがオブジェクトを宣言する方法で文字列を組み合わせたものです。
JS は次の方法でオブジェクトを定義できます:
var obj = { id: 2 , name: ' n ' };
これは、2 つのパブリック属性 id と name を持つオブジェクト obj を定義し、その属性値は obj.id を使用して直接アクセスできます。
サーバーからデータを取得する場合、複数のオブジェクトが存在することが多く、オブジェクト配列を使用する必要があります。JS のオブジェクト配列は、次のように [] で定義できます。オブジェクト配列 objs を定義します。これには 2 つのオブジェクトが含まれており、最初のオブジェクトを参照する objs[0] などのインデックスを使用してアクセスできます。
サーバーから返される文字列の形式についてはもうお分かりいただけたかと思いますが、文字列は所詮文字列であり、JSで操作できる変数に変換する必要があります。 これは eval 関数を使用します。次の例を参照してください:
var
objs
=
[{ id:
1
, name:
'
n_1
'
}, { id:
2
, name:
'
n_2
'
}];
alert(objs[
0
].id);
わかりました、サーバー側では、次の形式を使用するだけです: [{ id: 1, name: 'n_1' }, { id: 2, name : 'n_2'}] 文字列を返します
以下はAJAXを使った簡単な例です。新しい Web サイトを作成し、ルート ディレクトリに一般的なハンドラー (GetJson.ashx) を追加します。コードは次のとおりです。 GetJson.ashx 在Default.aspx 文件中添加测试脚本: 再添加一个测试按钮即可以看到效果: 二、XML JS对XML的解析是基于DOM的,对HTML的DOM熟悉的话,解析XML就没什么困难了。 注意:在Firefox中,解析器不会忽略空格,所以元素间的空格,FF一样会认为是一个节点。 在根目录下添加一个新的一般处理程序(GetXml.ashx),代码如下: 在Default.aspx页面添加以下脚本: 注意到代码段:var root = xmlDoc.documentElement; 主要是为了消除IE6和其他浏览器的兼容问题,在其他浏览器下,允许request.responseXML.getElementsByTagName("Person"); 添加测试按钮: 总结:从代码上很容易看出,解析JSON相对直观,在网络中需要传输的字符串也比较少,解析过程中也不需要考虑浏览器兼容问题。 以上がJSON と XML を解析する JavaScript のサンプル コードの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
<
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的时候,一般不会出现节点间有空格的情况。
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
);
}
<input type="button" value="GetXml" onclick="getXml();" />
但JSON比较适合轻量级的数据交互,XML则比JSON多了一些特性,比如命名空间,还有更多的节点类型。