ExtJS HttpProxy+XmlReaderのサンプル
4月 20th, 2008 | By yuki | Category: Ext JS前回のデモのHttpProxy+XmlReader版デモです↓
コードの説明については↑のページのソースをご覧ください。前回と異なるのは、
- Proxy : ScriptTagProxy → HttpProxy
- Reader : JsonReader → XmlReader
データを取得するためのProxyと読み込みのためのReaderがそれぞれ変わっています。注意点ですが、
- JsonReaderとXmlReaderではパラメーター名とパスの指定方法が異なる(レコードを指すパラメータはJsonReaderが「root」なのに対しXmlReaderは「record」、トータルのレコード数は「totalProperty」に対し「totalRecords」といった感じです。以下比較)
XmlReader
reader: new Ext.data.XmlReader({ record: ‘usedcar’, totalRecords: ‘results_available’, id: ‘id’, fields: [ {name:’photo’, mapping: ‘photo/main/s’}, {name:’model’}, {name:’grade’}, {name:’brand’, mapping: ‘brand/name’}, {name:’url’, mapping: ‘urls/pc’}, {name:’price’} ] })JsonReader
reader: new Ext.data.JsonReader({ root: ‘results.usedcar’, totalProperty: ‘results.results_available’, id: ‘id’, fields: [ {name:’photo’, mapping: ‘photo.main.s’}, {name:’model’}, {name:’grade’}, {name:’brand’, mapping: ‘brand.name’}, {name:’url’, mapping: ‘urls.pc’}, {name:’price’} ] })JsonReaderのrootとtotalRecordsは上記例ではそれぞれ、「results.usedcar」、「results.results_available」と最上位からのパスになっていますが、XmlReaderは最上位のノードは省略して「usedcar」「results_available」となります。パスの表現もJsonReaderは「.」で区切るのに対して、XmlReaderは「/」となります
- HttpProxyのデフォルトリクエストは「POST」なので、必要に応じてコンストラクターで「GET」に設定
以下、サーバー側のPHPのコードになります:
ExtJS// Carsendor.NET データ取得スクリプト // 入力パラメータの処理 $start = ($_GET['start']!==null && is_numeric($_GET['start']))?(integer)$_GET['start']:1; $count = ($_GET['count']!==null && is_numeric($_GET['count']))?(integer)$_GET['count']:20; // APIクエリの設定 $url = 'http://webservice.recruit.co.jp/carsensor/usedcar/v1/'; $params = array( 'key' => 'd66bf4106270fae4', // 自分のAPI-KEYを入れてください 'person'=> 2, // Carsensor.NET API用必須パラメーターの一つ(乗車定員)これでほぼ全データを取得 'order' => 1, 'format'=> 'xml', 'start' => $start, 'count' => $count ); $param_str = array(); foreach($params as $key => $value){ $param_str[] = $key."=".$value; } $query = $url.'?'.implode('&',$param_str); // XMLヘッダーの送信 header("Content-Type: text/xml"); // 余計なデータをサーバー側で削ってクライアントに送るような処理を入れた方がベターかも echo file_get_contents($query);