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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM