ajax跨域请求json数据时或js代码时,是不能直接请求的,由于浏览器的同源策略,只能跨域请求js代码,通过js代码来回调函数
跨域分两种:①域名不相同
②域名相同,端口不同
下面给出ajax跨域请求json数据和js代码
js代码:
getJsonp(); /*getJSON跨域请求json数据*/ function getJsonp() { var url = "http://localhost:8080/getJsonp?callback=?"; //注意:这里这个 ? 就是问号,其他的不正确 $.getJSON(url,function(result) { console.log(result); }); } /*ajax跨域请求json数据,get/post均可*/ function ajaxJsonp() { $.ajax({ url : "http://localhost:8080/getJsonp?callback=?", type : "get", dataType : "jsonp", jsonp : "callback", success : function (result) { console.log(result); } }) } /*get/post跨域请求json数据*/ function get() { var url = "http://localhost:8080/getJsonp?callback=?"; $.get(url,function(result) { console.log(result); },"jsonp"); } /*跨域请求js*/ function getScript() { var url = "http://localhost:8080/getScript"; $.getScript(url,function(){ alert("执行成功"); }); }
Java服务器端代码:
/** * ajax跨域请求json数据 * @param callback */ @ResponseBody @RequestMapping(value = "/getJsonp") public Object getJsonp(String callback) { User user = new User(100, "张无忌","123456", "123456@qq.com" , new Date()); MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(user); mappingJacksonValue.setJsonpFunction(callback); return mappingJacksonValue; }
或者
/** * ajax跨域请求json数据 * @param callback */ @ResponseBody @RequestMapping(value = "/getJson",produces = MediaType.APPLICATION_JSON_VALUE+";charset=utf-8") public String getJson(String callback){ User user = new User(100, "张无忌","123456", "123456@qq.com" , new Date()); //把pojo转成json字符串 String json = JsonUtils.objectToJson(user); //拼接返回值 return callback + "(" + json + ")"; }
/** * ajax跨域请求js代码 */ @RequestMapping(value = "/getScript") public String getScript() { return "script/json.js"; }
这样,js就能跨域请求服务器端数据了