涉及接口 hotel.destination
demo语言: Java
开发环境:
前端 jQuery类库、layui、 bootstrap
后端 jdk1.7以上、 tomcat8以上、 springmvc + spring + mybatis
通过目的地接口可以直接输入目的地开头查找目的地列表
html城市输入
创建一个可以输入的'下拉列表'
<input type="text" id='selectCity' placeholder="请选择" value="北京市" class="layui-input" lay-value="0101" > <dl class="layui-anim layui-anim-upbit" id="cityList"> <dd lay-value="0101" class="layui-this">北京市</dd> </dl>
js请求对象
构造请求url及请求数据
var destinationUrl= "/api/hotel/getDestinations"; // controller方法路径 // 构造请求参数对象 var destinationReq = { "queryText": $("#selectCity").val(), "sugOrientation": 0 };
js异步请求
js监听输入框输出的城市开头的字符,将该字符传入后端返回城市列表
// 绑定监听selectCity输入 $("#selectCity").off('input').on('input',function (e) { var inputVal = e.delegateTarget.value; destinationReq.queryText = inputVal; jQuery.ajax({ url: destinationUrl, dataType: 'json', type: 'POST', contentType:"application/json", data: JSON.stringify(destinationReq), success: function (data) { // 请求成功 if (data != null && data.code ==0) { regionResult = data.result.regionResult; $("#selectCity").html("") var ddStr = "" // 记录是否被选中 var isSelected = false; for(var i in regionResult) { if(regionResult[i].regionType == 0){ if($("#selectCity").attr("lay-value") == regionResult[i].regionId){ isSelected = true; ddStr += "<dd lay-value='"+regionResult[i].regionId +"' class='layui-this'> "+regionResult[i].regionNameCn+"</dd>" } else { ddStr += "<dd lay-value='"+regionResult[i].regionId+"'> " +regionResult[i].regionNameCn+"</dd>" } } } // 将目的地列表插入dl列表 $("#cityList").html(ddStr) if (!isSelected) { $("#cityList").children().first().attr("class", "layui-this"); $("#selectCity").attr("lay-value", $("#cityList").children().first().attr("lay-value")) } }else{ console.log("destination.data:"+ data) } }, error: function () { console.log("获取目的地失败") } }); });
java后端调用
后端通过http协议调用艺龙的hotel.destination接口
public class HotelDestinationApi { private static double version = 1.50; private static EnumLocal locale = EnumLocal.zh_CN; private static boolean isHttps = false; ... ... /** * 通过http工具类调用艺龙接口,将前端参数拼接为URL */ public BaseResponse<HotelDestinationSugResp> getHotelDestination(SearchSuggestRequest condition, String userName, String appKey, String secretKey) { BaseResponse<HotelDestinationSugResp> result = new BaseResponse<HotelDestinationSugResp>(); String url = ""; String responseData = ""; try{ BaseRequest<SearchSuggestRequest> req = new BaseRequest<SearchSuggestRequest>(); req.Version = version; req.Local = locale; req.Request = condition; //请求参数转换为Json字符串 String str = JsonUtil.entity2Json(req); //产生签名 long epoch = System.currentTimeMillis()/1000; String sig = Tool.md5(epoch + Tool.md5(str + appKey) + secretKey); //产生请求链接 url = "http://" + serverHost + "/rest?format=json&method=hotel.destination"; url += "&user="+ userName +"×tamp="; url += epoch; url += "&signature="; url += sig; url += "&data=" + Tool.encodeUri(str); System.out.println(url); //发送请求 responseData = HttpUtil.Send("GET", url, "", "application/json"); //返回值处理 result = JSON.parseObject(responseData, new TypeReference<BaseResponse<HotelDestinationSugResp>>() {}); } catch (Exception e) { log.info("[HotelDetailApi] 异常: " + e); log.info("发送的url: " + url); log.info("返回值: " + responseData); } return result; } ... ... }
效果展示
