zoukankan      html  css  js  c++  java
  • 使用springMVC和Jquery实现JSONP

    JSONP这个东东是啥我就不写了,直接贴实现的代码

    JAVA代码:

      /**
         * 
         * 查询用户是否已经提交认证获取已经是认证会员
         *
         * 使用spring mvc的直接返回string会遇到分号转义后字符串不完整的问题
         * @param userId
         * @param callback
         * @return
         * @see [相关类/方法](可选)
         * @since [产品/模块版本](可选)
         */
        @RequestMapping("/queryAuthTaskStatus")
        @ResponseBody
        public void queryTaskStatus(@ModelAttribute(User.SESSION_USERID)String userId, String callback,PrintWriter out){
            log.info("queryAuthTaskStatus:,user_id="+userId);
            Map<String,String> ret = new HashMap<>();
            String code = null;
            String msg = null;
            if(StringUtils.isEmpty(userId)){
                code = "-1";
                msg = "用户未登陆";
            }else{
                try {
                    UserVO user = userService.findInfoByUserId(Long.parseLong(userId));
                    if(xxx==yyy){
                        code = "1";
                    }else{
                        code = "0";
                    }
                } catch (NumberFormatException | InParamException e) {
                    code = "-1";
                    msg = "查询用户信息异常";
                    log.error(e.getMessage(), e);
                } 
            }
            ret.put("code", code);
            ret.put("msg", msg);
            String result = callback + "(" + new Gson().toJson(ret) +")";
            out.write(result);

              out.flush();
              out.close();

        }

    之前使用直接返回String出现字符被截取掉了(原因未知),后改成使用PrintWriter对象直接输出。

    JS代码:

    $.ajax({
        async:false,
        url: 'xxx/queryAuthTaskStatus.htm',
        type: "get",
        dataType: 'jsonp',
        jsonp: 'callback',
        success: function (data) {
              console.log(data);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown){
        }
    }); 

    Jquery文档描述:

    jsonp    String
    在一个jsonp请求中重写回调函数的名字。这个值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,比如{jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。
    
    jsonpCallback    String
    为jsonp请求指定一个回调函数名。这个值将用来取代jQuery自动生成的随机函数名。这主要用来让jQuery生成度独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存GET请求的时候,指定这个回调函数名。

    如果不用上门的JSONP代码调用,而是用普通调用,例如直接在浏览器敲:xxx/queryAuthTaskStatus.htm?userId=1&callback=callback,这个绿色是对应后台的参数名称,红色对应Jquery中的jsonp的值。

    得到的结果:

    callback({"code":"0"})

    如果是jquery的jsonp请求代码将在console中看到:

    {"code":"0"}

    jsonp可以参考此blog:http://www.cnblogs.com/zichi/p/4593047.html

  • 相关阅读:
    ansible——playbook conditions条件判断
    ansible——playbook lookups从插件加载变量
    ansible——playbook循环
    lombok注解
    集合与集合取笛卡尔积
    List排列组合
    synchronized初识
    java IO与NIO
    文件I/O和标准I/O
    双数据源配置
  • 原文地址:https://www.cnblogs.com/yangzhilong/p/4826902.html
Copyright © 2011-2022 走看看