/** * GDSearchSuggestクラス * @param [string] result_id 結果表示オブジェクトのID名 * @param [object] setting_obj 設定値格納オブジェクト * @return [void] void */ var GDSearchSuggest = function(result_id, setting_obj) { // =========================================== // ライブラリチェック // =========================================== // jQueryの読み込み確認 if (typeof jQuery === 'undefined') { alert('jQuery is not loaded.'); return false; } // =========================================== // 引数のチェック // =========================================== // 設定変更オブジェクト setting_obj = (typeof setting_obj === 'undefined' ? {} : setting_obj); // =========================================== // 定数の宣言(引数により設定変更可能なもの) // =========================================== // 言語の指定 this.lang = (setting_obj.lang ? setting_obj.lang : 'ja'); // =========================================== // 引数の確認 // =========================================== // 結果表示オブジェクト this._setResult(result_id); this.data = ''; } /** * 処理関数郡の宣言 * 検索に使用する関数郡 */ GDSearchSuggest.prototype = { /** * サジェストブロックの検索、表示 * @param [string] params 追加パラメータ * @return [object] 正常に成功した場合はAjaxの処理結果をjQuery.DeferredのPromiseオブジェクトで返す */ getSuggestBlock : function(params, result_id, data) { // =========================================== // 引数のチェック // =========================================== // パラメータの指定が無い場合はエラー if (typeof params === 'undefined' || params === '') { return false; } // 結果表示オブジェクトの指定がある場合 if (typeof result_id !== 'undefined' && result_id !== '') { this._setResult(result_id); } if (typeof data !== 'undefined' && data !== '') { this.data = data; } // =========================================== // Ajaxでデータを取得 // =========================================== var def = jQuery.Deferred(); jQuery.ajax({ url : '/' + this.lang + '/travel-directory/api/' + params, data : this.data, type : 'POST', cache : false, async : true, context: this, success : function(ret) { // 戻り値がオブジェクトの場合 if (typeof ret == 'object') { if (ret.status) { var html = ''; if (typeof ret.hsc == 'object') { html = (typeof ret.hsc['html'] === 'undefined' || ret.hsc['html'] == false ? ret.contents['html'] : this._hscDecode(ret.contents['html'])); } else { html = (typeof ret.hsc === 'undefined' || ret.hsc == false ? ret.contents : this._hscDecode(ret.contents)); } this.result.html(html); } else { this.result.html('データの取得に失敗しました。'); def.resolve(false); } } // 戻り値が文字列の場合 else { this.result.html(ret); } def.resolve(true); }, error : function(XMLHttpRequest, textStatus, errorThrow) { this.result.html('データの取得に失敗しました。'); def.resolve(false); } }); return def.promise(); }, /** * HTMLエンティティデコード * @param [string] html HTMLエンティティをデコードしたい文字列 * @return [string] 正常に成功した場合はデコードした文字列を返す */ _hscDecode : function(html) { return jQuery('
').html(html).text(); }, /** * 結果表示オブジェクト用セッター * @param [string] result_id 結果表示オブジェクトのID名 * @return [void] void */ _setResult : function(result_id) { this.result = jQuery(result_id); }, }