酒店

获取目的地更新时间:2019/11/07 10:25

涉及接口 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 +"&timestamp=";
            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;
    }

    ...
    ...
}


效果展示

image.png