Ajax

準備


MonacaでAjaxpプログラミングする場合、jQueryが便利なので、[設定]の[JS/CSSコンポーネント]で[jQuery (Monaca Version) バージョン:X.X.X]を入れておく(これを書いているときは2.0.3)。

WebAPIで提供するデータのタイプとしては大きくJSON形式とXML形式がある。jQueryの$.ajaxはデフォルトではテキスト形式でデータを取得するが、WebAPIが提供するデータ形式に合わせておくと何かと便利。

そこで、データ形式ごとにAjaxプログラミングを説明する。

なお、jQueryによるAjaxのプログラミングについては「jQuery入門-Ajax(Shorthand Methods)-」が詳しい。

JSON形式の場合


WebAPIが提供するデータが次のようなJSON形式の場合を考える。

{
  "list": [
    {
      "memo": null,
      "facilityId": "1.3.6.1.4.1.9414.70.1",
      "patientModel": {
        "kanaName": "サヤマ セイジ",
        "gender": "male",
        "genderDesc": "M",
        "birthday": "1948-06-15",
        "fullName": "佐山 清二",
        "id": 31
      },
      "deptName": "内科",
      "deptCode": "01",
      "doctorName": "守久 遼子",
      "doctorId": "10002",
    }
  ]
}
リスト1

この場合、Javascriptのコードは次のようになる。ただし、ここでは id に "Ajax-F" が設定されているHTML要素をクリックしたときにAjaxが実行されるものとしている。
$(document).on('click', '#Ajax-F', function(){
  $.ajax({
    url: "data/pvtList.json",
    type: "GET",
    dataType: "json"
  }).done(function(data, status, xhr) {
    alert(data.list[0].facilityId);
  }).fail(function(xhr, status, error) {
    alert('Fail');
  });
});
リスト2 

データの受信形式を dataType で指定している。JSONデータを取得するので、ここには"json"を記述する。何も指定しなかった場合は"text"になる。そうなると、取得したデータ data をJSON.parse()関数を使ってJSONオブジェクトに変換しなければならない。

Ajax成功時(done()関数)、コールバック関数の第1引数 data にはJSON形式のオブジェクトが格納されて返ってくるので data.list[0].facilityId といった感じで要素にアクセスできる。

このプログラムを実行すると次のようになる。

図1.AjaxでJSONデータを取得

XML形式の場合


次にXML形式のデータが返ってくる場合を説明する。
次のようなデータを考える。
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_45" class="java.beans.XMLDecoder">
  <object class="open.dolphin.infomodel.BundleMed">
    <void property="admin">
      <string>[用法] 1日3回毎食後に</string>
    </void>
    <void property="claimItem">
      <array class="open.dolphin.infomodel.ClaimItem" length="1">
        <void index="0">
          <object class="open.dolphin.infomodel.ClaimItem">
            <void property="code">
              <string>610421320</string>
            </void>
            <void property="name">
              <string>アダラートCR錠10mg</string>
            </void>
            <void property="number">
              <string>3</string>
            </void>
            <void property="unit">
              <string>錠</string>
            </void>
          </object>
        </void>
      </array>
    </void>
    <void property="className">
      <string>投薬(内服・頓服・調剤)(院外)</string>
    </void>
  </object>
</java>
リスト3

この場合、Javascriptのコードは次のようになる。
$(document).on('click', '#Ajax-F', function(){
  $.ajax({
    url: "data/medicine.xml",
    type: "GET",
    dataType: "xml"
  }).done(function(data, status, xhr) {
    // xmlオブジェクト -> jQueryオブジェクト 
    $xml = $(data);
    alert($xml.find('void[property="name"]').find('string').text());
  }).fail(function(xhr, status, error) {
    alert('Fail');
  });
});
リスト4 

XML形式を返すWebAPIの場合、5行目で dataType に "xml" を設定する。
すると、6行目の done() のコールバック関数の第1引数 data にはXMLオブジェクトが格納される。8行目では、XMLデータを扱いやすくするためにXMLオブジェクトをjQueryオブジェクトに変換している。こうすれば、9行目のように欲しいデータにfind()メソッドやtext()メソッドを使ってアクセスできる。
$xml.find('void[property="name"]').find('string').text()
これは、property属性がnameの要素内のstring要素に記述されている文字列「アダラートCR錠10mg」を取得するためのコードである。

実行結果は次のようになる。

図2.XML形式の場合の実行結果

0 件のコメント:

コメントを投稿