$.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种写法都是生效的。这里本人没有处理编码问题,所以传过去的多是乱码。因此若有读者引用本人例子时候请注意此处乱码问题须要本身解决。