AJAXは、それは多くの場合、サーバーから返される文字列の文字列を解決する必要があるの書き込み、サーバーは、ここで文字簡単に二つのフォーマット、およびそれらの上にJavaScriptの構文解析方法を返します。
、JSON
すなわち、JSオブジェクトタグ(JavaScript Object Notation)は、仕方JSの組み合わせで宣言された文字列オブジェクトのシリーズです。
次のようにJSのオブジェクトを定義することができます。
VAR OBJ = { ID: 2 、 名称: 'N' }。
これは、2つの共通属性IDと名前を有するオブジェクトobj、直接obj.id方法をアクセスすることができる属性値を定義します。
多くの場合、複数のオブジェクトのオブジェクト配列の使用を必要とするデータ取得サーバ、から次のように、オブジェクトのアレイはJS []に定義されてもよいです。
VAR
OBJS
=
[{ID:
1
、名称:
'
N_1
'
}、{ID:
2
、名称:
'
N_2
'
}]。
アラート(OBJS [ 0 ] .ID)。
アラート(OBJS [ 0 ] .ID)。
これは、最初のオブジェクトへの参照を[0]例えばOBJSように、それに含まれる2つのオブジェクトがインデックスにアクセスすることができ、オブジェクトのOBJS配列を定義します。
ここでは、サーバが文字列形式を返しますと思ったかもしれない結局、何ですが、文字列は、我々はそれを変数に変換する必要がある文字列は、JSの操作を利用することができます。
この使用eval関数は、次の例を参照してください。
VAR
OBJS
=
eval_r(
"
[{ID:1、名称: 'N_1'}、{ID:2、名称: 'N_2'}]
"
)。
アラート(OBJS [ 0 ] .ID)。 // 戻り値1
アラート(OBJS [ 0 ] .ID)。 // 戻り値1
まあ、フォーマットのあなただけのサーバー:[{ID:1、名前 : 'N_1'}、{ID:2、名称: 'N_2'}] 文字列を返し、
クライアントは(eval_r使用することができます)、実行を返します文字列、配列を取得します。
クライアントは(eval_r使用することができます)、実行を返します文字列、配列を取得します。
以下は、AJAXを使用して簡単な例を作ります。次のように、ルートディレクトリにある一般的な処理手順(GetJson.ashx)を追加する新しいサイト:
<%@ WebHandler言語= "C#の"クラス= "GetJson" %> Systemを使用。 System.Webのを使用して、 パブリッククラスGetJson:IHTTPハンドラ{ 公共ボイドのprocessRequest(のHttpContextコンテキスト){ 文字列str = "[{ID:1、名称: 'N_1'}、{ID:2、名称: 'N_2'}]" 。 context.Response.ContentType = "text / plainの" ; context.Response.Write(STR)。 } パブリックブールIsReusable { 取得{ 戻ります 偽。 } } }
Default.aspxファイルでテストスクリプトを追加します。
<スクリプトタイプ= "テキスト/ javascriptの"> 関数getJson(){ // 在IE7下测试通过、IE6下必须创建新しいActiveXObjectを( "MSXML2.XMLHTTP.6.0") VaRの要求= 新規のXMLHttpRequest(); request.open( 'GET' 'GetJson.ashx' ); request.onreadystatechange = 関数(){ 場合(request.readyStateの== 4 && request.statusの== 200 ){ VAR OBJS = eval_r(request.responseText)。 警告(objs.length)。// 2 アラート(OBJS [0] .ID)。 1つの アラート(OBJS [1] .nameの)。// 'N_2' } } request.send(NULL )。 } </ SCRIPT>
結果を確認するためのテストボタンを追加します。
<
入力
タイプ
= "ボタン"
値
= "GetJson"
のonclick
= "getJson();"
/>
二、XML
XMLのJSの解析は困難HTML DOMおなじみの、XMLパース何のDOMに基づいています。
注意:Firefoxでは、パーサは空白を無視していないので、要素間のスペース、FFはノードと見なされます。
XMLをスプライスするときしかし、私たちのプログラムでは、一般的に起こるノード間のスペースを持っていません。
XMLをスプライスするときしかし、私たちのプログラムでは、一般的に起こるノード間のスペースを持っていません。
次のように、ルートディレクトリに新しい汎用ハンドラ(GetXml.ashx)を追加します:
Default.aspxの中で次のスクリプトのページを追加します。
<%@ WebHandler言語= "C#の"クラス= "GETXML" %> Systemを使用。 System.Webのを使用して、 パブリッククラスGETXML:IHTTPハンドラ{ 公共空のprocessRequest(のHttpContextコンテキスト){ System.Text.StringBuilder SB = 新しい System.Text.StringBuilder( "<?xmlのバージョン= '1.0'> <人>" ); ストリングTEMP = "<人> <ID> {0} </ ID> <名前> {1} </名前> </人>" 。 sb.AppendFormat(TEMP、 1、 "N_1" )。 sb.AppendFormat(TEMP、 2、 "N_2" )。 sb.Append( "</人>" ); context.Response.ContentType = "text / xmlで"; context.Response.Write(sb.ToString())。 } パブリックブールIsReusable { 取得{ 戻ります 偽。 } } }
機能GETXML(){ // 在IE7下测试通过、IE6下必须创建新しいActiveXObjectを( "MSXML2.XMLHTTP.6.0") VaRの要求= 新規のXMLHttpRequest(); request.open( 'GET' 'GetXml.ashx' ); request.onreadystatechange = 関数(){ 場合(request.readyState == 4 && request.statusの== 200 ){ VARの XMLDOC = request.responseXML。 VaRのルート= xmlDoc.documentElement。 var要素= root.getElementsByTagName_r( "人物" )。 アラート(elements.length); // 2 // 要素[0]人の最初のノードへのid .firstChild基準ノード // 要素[0] .firstChild.firstChild参照テキスト・ノードは、ノードに対してID // ためのテキスト・ノードそれが最初の子要素ノードである 警告(要素[0] .firstChild.firstChild.nodeValue); // 1 アラート([1]の要素.lastChild.firstChild.nodeValue); // 'およびN_2' } } request.send (NULL ); }
スニペットに注目:
VAR
ルート
=
xmlDoc.documentElement。
主に他のブラウザで他のブラウザとIE6の互換性の問題を解消するために、request.responseXML.getElementsByTagName_r(可能にする「人」)。
テストボタンを追加します。
< 入力 タイプ= "ボタン" 値= "GETXML" のonclick = "GETXML();" />
概要:、ネットワークに送信される文字列が比較的小さい、それはブラウザの互換性の問題を解析する時に考慮すべきことは、JSONの構文解析コードから簡単に確認することができ、比較的簡単必要はありません。
JSONが、軽量のデータ交換のためのより適切な、XMLは名前空間など、いくつかの機能、JSONよりもはるかにあり、より多くのノードの種類があります。
JSONが、軽量のデータ交換のためのより適切な、XMLは名前空間など、いくつかの機能、JSONよりもはるかにあり、より多くのノードの種類があります。
ます。https://www.cnblogs.com/JoannaQ/archive/2012/09/07/2674501.htmlで再現