
先日下記投稿をさせていただき、とあるAPI URLからXML取得できるようになったのですが、
https://teratail.com/questions/154917
別のAPI URL を取得しようとしたところ、HTMLCollectionが空で取得され、
デバッガでargumentsを見ると、
TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
at Function.remoteFunction (<anonymous>:2:14)
と表示されています。
いくつかググってみて、 'use strict' をつけたり外したりしてみたものの変わらず・・
データ取得する方法がないか、ご教授いただけませんでしょうか。。
//対象XML 一部 // <Results xmlns="jws"> <NumberOfResults>10</NumberOfResults> <DisplayPerPage>1</DisplayPerPage> <DisplayFrom>1</DisplayFrom> <APIVersion>1.3</APIVersion> <Hotel> <HotelID>300624</HotelID> <HotelName>天空の城三宜亭本館</HotelName> <PostCode>395-0034</PostCode> <HotelAddress>長野県飯田市追手町2-641-10</HotelAddress> <Area> <Region>甲信越</Region> <Prefecture>長野県</Prefecture> <LargeArea>伊那・駒ヶ根・飯田・昼神</LargeArea> <SmallArea>飯田・天竜峡</SmallArea> </Area> <HotelType>旅館</HotelType> <HotelDetailURL>
// app.js (Vue.js) const vm = new Vue({ el: '#app', data: { prefs: [], largearea: '', }, methods: { get_location: function () { const request = 'ajax.php?url=http://jws.jalan.net/APILite/HotelSearch/V1/?key=API_KEY&pref=160000&l_area=162600&s_area=162612&h_type=1&start=1&count=1' axios.get(request, { timeout: 30000, responseType: 'document' }) .then(function (response) { const xml = response.data; const areas = xml.getElementsByTagName('hotel'); console.log(areas)
頂いたコメントをもとに追記いたします。
こちらのブログを参考に設定していまして、クロスドメイン制約は下記で対応していると思っているのですが、不足あるかもしれません。
参考ブログ Vue.js と Ajax でお天気アプリっぽいのを作ってみた
// ajax.php <?php if(isset($_GET["url"]) && preg_match("/^https?:/",$_GET["url"])){ $data = file_get_contents($_GET["url"]); $data = mb_convert_encoding($data, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); echo $data; }else{ echo "error"; }
// index.html <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <link rel="stylesheet" href="style.css"> <title>APIテスト</title> </head> <body> <div id="app"> <div class="app-header"> <h1>施設情報</h1> <div> エリアを選択: <select class="form-control" v-model="largearea" v-on:change="get_largearea(largearea)"> <option v-for="item in prefs" v-bind:value="item.cd">{{ item.large_name }}</option> </select> </div> </div> </div> <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <script src="https://unpkg.com/vue"></script> <script src=".config.js"></script> <script src="app.js"></script> </body> </html>
エラー箇所
hotelのHを大文字にしても変わらずでした。。
const areas = xml.getElementsByTagName('Hotel');
回答1件
あなたの回答
tips
プレビュー