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