jsonp的解決ajax跨域問題

1、ajax跨域問題,使用jsonp進行解決

利用js的特性
<script type="text/javascript" src="http://localhost:2701/Scripts/jquery-1.4.4.min.js"></script>


返回後調用方法解析數據到ajax請求中的data數據中

簡單的理解爲 帶callback的json就是jsonp.


2、前端

話不多說,上js代碼,使用方法和普通ajax一樣,返回數據類型爲jsonp即可。

$.ajax({
			url : "http://localhost:8089/user/token/" + _ticket,
			dataType : "jsonp",
			type : "GET",
			success : function(data){
				if(data.status == 200){
					var username = data.data.username;
					var html = username + ",歡迎來到淘淘!<a href=\"http://www.taotao.com/user/logout.html\" class=\"link-logout\">[退出]</a>";
					$("#loginbar").html(html);
				}
			}
		});



3、服務端 在返回json的時候包裝一層即可返回格式  (callback(jsonString);

@RequestMapping(value="/user/token/{token}",method=RequestMethod.GET,
			//指定響應的格式
			produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
	@ResponseBody
	public String getUserByToken(@PathVariable String token,String callback){
		TaotaoResult result = userService.getUserByToken(token);
		//判斷是否爲jsonp請求
		if(StringUtils.isNotBlank(callback)){
			return callback +"("+JsonUtils.objectToJson(result)+");";
		}
		return JsonUtils.objectToJson(result);
	}


4、spring4.1以上的解決辦法

//jsonp第二種解決辦法  需要spring4.1以上
	@RequestMapping(value="/user/token/{token}",method=RequestMethod.GET)
	@ResponseBody
	public Object getUserByToken(@PathVariable String token,String callback){
		TaotaoResult result = userService.getUserByToken(token);
		//判斷是否爲jsonp請求
		if(StringUtils.isNotBlank(callback)){
			MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result);
			//設置回調方法
			mappingJacksonValue.setJsonpFunction(callback);
			return mappingJacksonValue;
		}
		return result;
	}



發佈了48 篇原創文章 · 獲贊 10 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章