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

posted @ 2015-09-21 18:18  自行车上的程序员  阅读(4098)  评论(0编辑  收藏  举报