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形式の場合を考える。

  1. {
  2. "list": [
  3. {
  4. "memo": null,
  5. "facilityId": "1.3.6.1.4.1.9414.70.1",
  6. "patientModel": {
  7. "kanaName": "サヤマ セイジ",
  8. "gender": "male",
  9. "genderDesc": "M",
  10. "birthday": "1948-06-15",
  11. "fullName": "佐山 清二",
  12. "id": 31
  13. },
  14. "deptName": "内科",
  15. "deptCode": "01",
  16. "doctorName": "守久 遼子",
  17. "doctorId": "10002",
  18. }
  19. ]
  20. }
リスト1

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

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

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

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

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

XML形式の場合


次にXML形式のデータが返ってくる場合を説明する。
次のようなデータを考える。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <java version="1.8.0_45" class="java.beans.XMLDecoder">
  3. <object class="open.dolphin.infomodel.BundleMed">
  4. <void property="admin">
  5. <string>[用法] 1日3回毎食後に</string>
  6. </void>
  7. <void property="claimItem">
  8. <array class="open.dolphin.infomodel.ClaimItem" length="1">
  9. <void index="0">
  10. <object class="open.dolphin.infomodel.ClaimItem">
  11. <void property="code">
  12. <string>610421320</string>
  13. </void>
  14. <void property="name">
  15. <string>アダラートCR錠10mg</string>
  16. </void>
  17. <void property="number">
  18. <string>3</string>
  19. </void>
  20. <void property="unit">
  21. <string></string>
  22. </void>
  23. </object>
  24. </void>
  25. </array>
  26. </void>
  27. <void property="className">
  28. <string>投薬(内服・頓服・調剤)(院外)</string>
  29. </void>
  30. </object>
  31. </java>
リスト3

この場合、Javascriptのコードは次のようになる。
  1. $(document).on('click', '#Ajax-F', function(){
  2. $.ajax({
  3. url: "data/medicine.xml",
  4. type: "GET",
  5. dataType: "xml"
  6. }).done(function(data, status, xhr) {
  7. // xmlオブジェクト -> jQueryオブジェクト
  8. $xml = $(data);
  9. alert($xml.find('void[property="name"]').find('string').text());
  10. }).fail(function(xhr, status, error) {
  11. alert('Fail');
  12. });
  13. });
リスト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 件のコメント:

コメントを投稿