zoukankan      html  css  js  c++  java
  • jquery调用spring mvc接口返回字符串匹配

      背景:有个增删改页面,用jquery祭出ajax异步调用接口,spring mvc响应对象是个json字符串,jquery根据响应结果判断,如果删除成功给出提示。那么问题来了,接口里响应的字符串怎么匹配页面的字符串来判断是否删除成功?

      具体场景如下:

      jquery文件

        getCacheDate: function(cacheName, key, operationType) {
          var _this = this;
          $.ajax({
            url: _this.host + "getCacheData",
            dataType: "json",
            method: "post",
            data: {
              cacheName: cacheName,
              key: key,
              operationType: operationType
            },
            success: function(result) {
              $(".loading").addClass("loading-hide");
              if(result == "delete success"){
                _this.jsonData = {};
                $(".json-renderer").trigger("DeleteDataSuccess");
              }else{
                _this.jsonData = result;
                $(".json-renderer").trigger("GetDataSuccess");
              }
            },
            error: function(err) {
              console.log(err);
              $(".loading").addClass("loading-hide");
              $(".json-renderer").trigger("GetDataFailed");
            }
          });
        },

      spring controller类

        @RequestMapping(value = "/getCacheDate", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
        public @ResponseBody String getCacheDate(MemcacheBeanRequest memcacheBeanRequest)
        {
            // 获取缓存操作信息
            String operationType = memcacheBeanRequest.getOperationType();
            String cacheName = memcacheBeanRequest.getCacheName();
            String key = memcacheBeanRequest.getKey();
            
            if (StringUtils.isEmpty(operationType) || StringUtils.isEmpty(cacheName) || StringUtils.isEmpty(key))
            {
                return null;
            }
            
            // 执行缓存操作,得到结果
            return memcacheViewService.doMemcached(operationType, cacheName, key);
        }

      看到这里很明显了,我的getCacheData接口必须返回delete success这个字符串,去匹配jquery里的result字符串对象,才能提示删除成功。问题转化为Controller接口getCacheData返回什么。如果想当然的以为就返回字符串"delete success",那么很抱歉,这是不对的,因为Controller注解@ResponseBody要求我们返回的是一个json字符串,而不单单是一个纯字符串。假如getCacheData真的返回"delete success",那么页面会进入error分支,而不是success分支,因为页面无法解析该result文本:

    [object Object]
    memcacheview.js (208,11)
       {
          [functions]: ,
          __proto__: { },
          readyState: 4,
          responseText: "delete success",
          status: 200,
          statusText: "parsererror"
       }

      到这里问题又转化为响应出去的json是什么。我们知道json是键值对格式的,所以不能单纯这样响应"{"delete success"}",这种格式一样是页面无法解析的。我们知道value肯定就是"delete success",那么key我这里选用msg,getCacheData接口返回"{"msg":"delete sucess"}",jquery判断条件改为if(result.msg == "delete sucess"),问题解决。

      

  • 相关阅读:
    Unity制作地形的常用插件之GAIA
    JetBrains套装免费学生授权申请(IntelliJ, ReSharper, WebStorm...)
    Unity2D游戏开发之保卫萝卜
    Unity制作出《超级马里奥》的2D和3D混合效果
    Unity2019.1中文技术手册离线版
    暗黑战神! Unity3D网游ARPG实战案例
    Unity移动端入门
    win10如何查看电脑端口使用情况
    自制FastDFS文件服务器虚拟机分享
    MySQL:使用SQL语句删除所有索引
  • 原文地址:https://www.cnblogs.com/wuxun1997/p/7889956.html
Copyright © 2011-2022 走看看