前段時間用JSONP解決了跨域問題,如今不用了,把代碼思路記下來,從此說不定還用得上。 前端
JS代碼python
//查詢公告數據jquery
function recentpost(){}json
JS代碼,主要就是使用jquery的getJSON方法。api
更多描述,來自jquery 文檔。跨域
經過 HTTP GET 請求載入 JSON 數據。app
在 jQuery 1.2 中,您能夠經過使用JSONP形式的回調函數來加載其餘網域的JSON數據,如 "myurl?callback=?"。jQuery 將自動替換 ? 爲正確的函數名,以執行回調函數。 注意:此行之後的代碼將在這個回調函數執行前執行。函數
url:發送請求地址。post
data:待發送 Key/value 參數。jsonp
callback:載入成功時回調函數。
從 Flickr JSONP API 載入 4 張最新的關於貓的圖片。
<div id="images"></div>
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format =json&jsoncallback=?", function(data){ $.each(data.items, function(i,item){ $("<img/>").attr("src", item.media.m).appendTo("#images"); if ( i == 3 ) return false; }); });
從 test.js 載入 JSON 數據並顯示 JSON 數據中一個 name 字段數據。
$.getJSON("test.js", function(json){ alert("JSON Data: " + json.users[3].name); });
從 test.js 載入 JSON 數據,附加參數,顯示 JSON 數據中一個 name 字段數據。
$.getJSON("test.js", { name: "John", time: "2pm" }, function(json){ alert("JSON Data: " + json.users[3].name); });
Java代碼
@RequestMapping(value = "recentpost")
public void recentPost(Integer categoryid, String jsoncallback,
Integer count, Model model, HttpServletResponse response) {
if (categoryid == null) {
categoryid = DEFAULT_CATEGORY;
}
List<Post> list = postService.listRecent(categoryid, count);
// JSONObject json = new JSONObject();
// json.put("list", list);
// String str=json.toJSONString();
// model.addAttribute("callback", list);
String str = JSONObject.toJSONString(list);
str = jsoncallback + "(" + str + ")";
super.returnMessage(response, str);
}
使用JSON庫,把jsonp格式的字符串發送到前端。記得函數名稱jsoncallback這個參數。