您的位置:首页 > Web前端 > JQuery

使用springMVC和Jquery实现JSONP

2015-09-21 18:18 531 查看
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);
}


之前使用直接返回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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: