• 使用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

  • 相关阅读:
    Chrome内核浏览器不能翻译的解决办法,20220928突然不能用 狼人:
    Fetch发送请求 + 解决跨域问题 狼人:
    pip install加快速度 狼人:
    绕过 Cloudflare 的反机器人页面的 Python 模块。 狼人:
    frp内网穿透与Nginx和平共处共用80/443端口的手把手教程 狼人:
    树莓派没有声音 狼人:
    IIS7中asp.net执行cmd命令提示:拒绝访问。安全狗》安全防护》去掉勾选“进程行为控制” 狼人:
    运行软件程序并退出cmd命令窗口 狼人:
    .NET Core Web APi类库如何内嵌运行?
    EntityFrameworkCore 模型自动更新(上)
  • 原文地址:https://www.cnblogs.com/yangzhilong/p/4826902.html
Copyright © 2020-2023  润新知