Bootstrap-3-Typeahead 异步查询数据,自动补全

Bootstrap-3-Typeahead 异步查询数据,自动补全

  1. 引入bootstrap3-typeahead.min.js

  2. input 框添加autocomplete=“off” data-provide=“typeahead”

<input id="tId" name="tName" autocomplete="off" data-provide="typeahead" type="text" />
  1. 为input 框绑定事件
$(function() {
		$("#tId").typeahead({
            source: function (query, process) {
                $.ajax({
                    url: ctx + "/xxx/xx/findByName.shtml",
                    contentType: "application/json;charset=utf-8",
                    dataType: "json",
                    timeout: 50000,
                    data:  $("#paramName").val(),//查询参数
                    type: "POST",
                    async: false,
                    success: function (msg) {
                        var array = [];
                        $.each($.parseJSON(msg.message), function (i, item) {
                            var aItem = { id: item.id, name: item.name };//把后台传回来的数据处理成带name形式
                            array.push(aItem);
                        });
                        process(array);
                    }
                })
            },
            displayText:function(item){
                return item.name;
            }
        });
});

  1. 后端代码实现
**Controller**


@RequestMapping("findByName")
    public void findByName(HttpServletRequest req, HttpServletResponse res,@RequestBody String name) {
        Map<String,JSONArray> map = certificateMakingService.findByWname(name);
        writeResultObj(true, map.get("ggxh").toJSONString(), res);
    }


**ServiceImpl**


@Override
    public Map<String,JSONArray> findByWname(String measuringInstrumentName) {
        List<CertificateMaking> list = certificateMakingDao.findByWname(measuringInstrumentName);
        List<String> list1=new ArrayList<>();
        List<String> list2=new ArrayList<>();
        Map<String,JSONArray> listMap =new HashMap<>();
        Iterator<CertificateMaking> iterator = list.iterator();
        while (iterator.hasNext()) {
            CertificateMaking certificateMaking = iterator.next();
            if(!list2.contains(certificateMaking.getManufacturingUnit())){
                list2.add(certificateMaking.getManufacturingUnit());
            }
            if(!list1.contains(certificateMaking.getModelSpecification())){
                list1.add(certificateMaking.getModelSpecification());
            }
            iterator.remove();
        }

        /* Json格式的数组形式 */
        JSONObject obj;
        JSONArray array1 = new JSONArray();
        /* json格式的单个对象形式 */
        for ( int i = 0; i < list1.size(); i++ )
        {
            obj = new JSONObject();
            /* 依次填充每一个Java实体对象 */
            try {
                obj.put( "id", i );
                obj.put( "name", list1.get(i));
                array1.add( obj );
                /* 将JSONObject添加入JSONArray */
            }
            catch ( JSONException e ) {
                e.printStackTrace();
            }
        }
        JSONArray array2 = new JSONArray();
        /* json格式的单个对象形式 */
        for ( int i = 0; i < list2.size(); i++ )
        {
            obj = new JSONObject();
            /* 依次填充每一个Java实体对象 */
            try {
                obj.put( "id", i );
                obj.put( "name", list2.get(i));
                array2.add( obj );
                /* 将JSONObject添加入JSONArray */
            }
            catch ( JSONException e ) {
                e.printStackTrace();
            }
        }
        listMap.put("sccj",array2);//生产厂家
        listMap.put("ggxh",array1);//规格型号
        return listMap;
    }

我这里是获取了两个数据,一个数据可以简化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值