$.ajax({type: "get",javascript
async: false,html
url: "http://192.168.191.2:8080/server/userfunc/list.do",java
data:{account:'accounttest1'},ajax
dataType: "jsonp",spring
success: function(json){json
alert(JSON.stringify(json));後端
},跨域
error: function(){mvc
alert('fail');app
}});
隨着項目的發佈,出現了跨域的問題,所以就開始了jsonp的研究,用法很簡單如上,這個jsonp的用法跟請求json數據的用法只有一字之差,原理有大篇大篇的文章介紹我就不介紹了。
這裏還有一個問題,如圖,
數據是拿到了,可是有個警告,是否是美中不足?
這裏是後端的問題,經過上網查資料發現後端須要設置header("Content-type: application/json"),本人這裏用的是springmvc,這裏須要這樣寫:
本人親測,測試代碼以下:
/** * 傳過來的字符串格式爲:{"systemGroup":"WEB", "mobileIds":"bdzfzl001,sgbj001"} */ @RequestMapping("/listFunc.do") public void listFunc(@RequestParam("callback")String callback, String systemGroup, String mobileIds, ModelMap model, HttpServletResponse response) { response.setContentType("application/json"); logger.info("systemGroup:"+systemGroup + "|" + "mobileIds:"+mobileIds); String[] arrMobileId = mobileIds.trim().split(","); List<Map<String, Object>> dataList = map_t_func_listService.listFunc( systemGroup, arrMobileId); JsonResult res = new JsonResult(dataList); Object data = res.getData(); String message = new JsonResult(data).toJson(); logger.info("message:"+message); model.put("message", message); try { OutputStreamWriter os = new OutputStreamWriter(response.getOutputStream()); String data1 = callback + "(" + "{\"data\":[{\"FUNC_ID\":\"bdzfzl001\",\"FUNC_TITLE\":\"變電站負載率\",\"FUNC_URL\":\"listView.html\",\"ICON_URL\":\"./img/funButton/btn_bdzfzl.png\",\"SHOW_ORDER\":\"6\"},{\"FUNC_ID\":\"sgbj001\",\"FUNC_TITLE\":\"事故報警\",\"FUNC_URL\":\"listView.html\",\"ICON_URL\":\"./img/funButton/btn_sgbj.png\",\"SHOW_ORDER\":\"9\"}],\"msg\":null,\"code\":200}" + ")"; os.write(data1); os.flush(); os.close(); } catch(Exception e) { e.printStackTrace(); } }
若是不寫response.setContentType,那麼警告會有;
若是寫成response.setContentType("application/json"),那麼警告不會有;
若是寫成response.setContentType("text/javascript"),警告也不會有;
所以總結來講,有2種寫法都是生效的。這裏本人沒有處理編碼問題,所以傳過去的多是亂碼。因此若有讀者引用本人例子時候請注意此處亂碼問題須要本身解決。