后端ajax异步请求的使用

封装——是衡量是否简洁的重要标准

最近做一个白名单,给用户依据商户号添加使用。但是在添加之前要去判断是不是已经存在,如果存在的话,就要给前台返回信息,如果不存在就要有提示。

jsp整体使用from提交,关于是否存在的提示则使用ajax异步提交。

首先,给相关的字段添加一个onblur事件:

1 <td nowrap="nowrap">
2         <span><input id="enterCode" name="enterCode" class="form-control" type="text" onblur="chechEnterCode()"/></span>
3         <font id="enterCodeMsg"></font>
4 </td>

对应的js代码如下:

function chechEnterCode(){
    var enterCode = $("#enterCode").val();
    $.ajax({
        url : "paymentsetting.do?method=checkEnterCode",
        dataType : "json",
        type : "post",
        data : {"enterCode" : enterCode},
        success : function(json){
            if("false" == json.ret){
                $("#enterCodeMsg").html("该商户不存在!");
                $("#enterName").val("");
                $("#orgNo").val("");
                $("#orgNm").val("");
            }
            else if("true" == json.ret){
                $("#enterCodeMsg").html("");
                $("#enterName").val(json.ENTER_NAME);
                $("#orgNo").val(json.ORG_NO);
                $("#orgNm").val(json.ORG_NM);
            }
        }
    })
}

在controller层代码如下:

 1 /**
 2      * 
 3     * 【根据商户号反馈商户名、所属机构信息】
 4     * @param request
 5     * @param response
 6     * @param enterCode
 7      */
 8     @RequestMapping(params = "method=checkEnterCode")
 9     public void checkEnterCode(HttpServletRequest request,HttpServletResponse response, String enterCode){
10         try {
11             Map map = (Map) paymentSettingServer.findEnterByEnterCode(enterCode);
12             if(null == map){
13                 map = new HashMap<>();
14                 map.put("ret", false);
15             }
16             else{
17                 map.put("ret", true);
18             }
19             String json = JsonUtil.map2json(map);
20             responseMessage(response,json);---------------------------》转注
21         } catch (Exception e) {
22             e.printStackTrace();
23         }
24     }

注:此处将所有的往前端写值的方法封装在一个类中:

1 protected void responseMessage(HttpServletResponse response, String message)
2             throws IOException {
3         LogUtil.MSG.debug(message);
4         response.setContentType("text/html;charset=UTF-8");
5         PrintWriter out = response.getWriter();
6         out.write(message);
7     }

controller层调用接口(server)如下:

1 /**
2      * 
3     * 【根据商户号获取商户信息】
4     * @param enterCode
5     * @return
6      */
7     public Object findEnterByEnterCode(String enterCode);

接口的实现如下:

 1 @Override
 2     public Object findEnterByEnterCode(String enterCode) {
 3         try {
 4             return paymentsettingServiceImpl.findEnterByEnterCode(enterCode);
 5         } catch(BizException ex) {
 6             LogUtil.MSG.error(ex.getMessage());
 7             throw ex;
 8         } catch(Exception ex) {
 9             LogUtil.ERROR.error(ex,ex);
10             throw new BizException(ex.getMessage());
11         }
12     }

服务层的代码如下:

1 public Object findEnterByEnterCode(String enterCode) {
2         try {
3             return paymentsettingDaoImpl.findEnterByEnterCode(enterCode);
4         } catch (Exception e) {
5             LogUtil.ERROR.error("校验商户号发生异常:" + e.getMessage());
6             throw new BizException("校验商户号发生异常", e);
7         }
8         
9     }

dao层代码如下(此处使用的是hibernate框架):

 1 public Object findEnterByEnterCode(String enterCode) {
 2         QueryHelper helper = new QueryHelper();
 3         helper.append("select ep.ENTER_CODE,ep.ENTER_NAME,cm.ORG_NO,cm.ORG_NM ");
 4         helper.append(" from T_ENTERPRISE ep "
 5                 + " left join CMMTINORG cm  on ep.ORGANIZATION = cm.ORG_NO ");
 6         helper.append(" where ep.ENTER_CODE = ?",enterCode);
 7         List list = super.getListBySql(helper, Transformers.ALIAS_TO_ENTITY_MAP);
 8         if(list.size() == 1){
 9             return list.get(0);
10         }
11         else{
12             return null;
13         }
14     }

不存在的情形(直接去数据库查询然后给出提示):

存在的情形(查询出对应的数据并且填充):

原文地址:https://www.cnblogs.com/1987721594zy/p/9872345.html