JavaScriptとXML JSONをパースします

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)。

    これは、最初のオブジェクトへの参照を[0]例えばOBJSように、それに含まれる2つのオブジェクトがインデックスにアクセスすることができ、オブジェクトのOBJS配列を定義します。
    ここでは、サーバが文字列形式を返しますと思ったかもしれない結局、何ですが、文字列は、我々はそれを変数に変換する必要がある文字列は、JSの操作を利用することができます。
    この使用eval関数は、次の例を参照してください。

         VAR  OBJS  =  eval_r( " [{ID:1、名称: 'N_1'}、{ID:2、名称: 'N_2'}] " )。
        アラート(OBJS [
0 ] .ID)。  //  戻り値1
    まあ、フォーマットのあなただけのサーバー:[{ID:1、名前 : 'N_1'}、{ID:2、名称: 'N_2'}] 文字列を返し、
    クライアントは(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をスプライスするときしかし、私たちのプログラムでは、一般的に起こるノード間のスペースを持っていません。
 
    次のように、ルートディレクトリに新しい汎用ハンドラ(GetXml.ashx)を追加します:
<%@ 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 { 
        取得{ 
            戻ります 
        } 
    } 

}
    Default.aspxの中で次のスクリプトのページを追加します。
        機能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よりもはるかにあり、より多くのノードの種類があります。

ます。https://www.cnblogs.com/JoannaQ/archive/2012/09/07/2674501.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34303897/article/details/93058216