关于jsonp

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

相关文章
相关标签/搜索