AjaxでJsonデータで処理を行う


概要

AjaxをJsonデータの結果を取得して制御を行う

クライアント

Html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>テストサイト</title>
    <script type="text/javascript" src="./ajax_test.js"></script>
</head>
<body>
    <form name="fm">
        <input type="button" value="XML取得" onclick="asyncSend()" />
    </form>
    <br />
    <div id="result"></div>
</body>
</html>
 
 

javascript

// リクエストオブジェクトを取得
function getXHR(){
    var req;
 
    try{
        req = new XMLHttpRequest();
    }catch(e){
        try{
            req = new ActiveXObject('Msxml2.XMLHTTP');
        }catch(e){
            req = new ActiveXObject('Microsoft.XMLHTTP');
        }
    }
 
    // 返却
    return req;
}
 
// Ajax送信処理
function asyncSend(){
    // リクエストオブジェクトを取得
    var req = getXHR();
    // コールバック関数を定義
    req.onreadystatechange = function(){
 
        // オブジェクトエレメントを取得
        var result = document.getElementById('result');
 
        // 通信完了ステータスチェック
        if(req.readyState == 4){
            // リクエストステータスチェック
            if(req.status == 200){
                // テキストデータを取得
                var data = eval('(' + req.responseText + ')');
 
                // 要素を取得
                var nodes = data.Result;
 
                var count = data.count;
 
                // データ数をチェック
                if(nodes.length <= 0){
                    result.innerHTML = "合致するデータはありませんでした。";
 
                }else{
                    // ULエレメントを作成
                    var ul = document.createElement('ul');
 
                    // ノードの数繰り返す
                    for(var i = 0;i < nodes.length;i++){
 
                        // 新規のLIエレメントを取得
                        var li = document.createElement('li');
 
                        // タイトルのテキストデータを取得
                        var name  = nodes[i].name;
                        var dob   = nodes[i].dob;
                        var price = nodes[i].price;
 
                        var label = (i+1) + "/" + count + ":[" + name + ":" + dob + price + "]";
 
                        // テキストエレメントを取得
                        var title = document.createTextNode(label);
 
                        // LIエレメントへ追加
                        li.appendChild(title);
 
                        // ULエレメントへ追加
                        ul.appendChild(li);
                    }
 
                    // resultの値を変更
                    result.replaceChild(ul, result.firstChild);
                }
 
            }else{
                // 通信失敗
                result.innerHTML = "サーバエラーが発生しました。";
            }
        }else{
            // 通信完了前
            result.innerHTML = "通信中…";
        }
    }
 
    // サーバとの非同期通信を開始
    req.open('GET', 
             'http://localhost.testweb01/ajax_json_test.php' ,
             true);
    req.send(null);
}
 
 

サーバ

php

<?php
    // 連想配列データを用意
    $list = array(
        "count" => "3",
        "Result" => array(
            array(
                "name"  => "hoge1",
                "dob"   => "20",
                "price" => "19770203",
            ),
            array(
                "name"  => "hoge2",
                "dob"   => "21",
                "price" => "19770505",
            ),
            array(
                "name"  => "hoge3",
                "dob"   => "22",
                "price" => "19750601",
            ),
        ),
    );
    // json形式に変換
    $json_value = json_encode($list);
 
// jsonデータを出力
header( 'Content-Type:text/javascript; charset=utf-8' );
echo $json_value;
?>
 
 

結果

初期表示

押下







最終更新:2012年02月19日 21:51