準備
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 件のコメント:
コメントを投稿