今天在使用ajax
發(fā)送請(qǐng)求的時(shí)候遇到了一點(diǎn)問(wèn)題,就是跨域订讼。顯然這就是需要用到JSONP
了浮定。
使用的是Jquery
來(lái)完成的AJAX
請(qǐng)求
$.getJSON('url?jsoncallback=?', {
categoryId: "1",
}, function (data) {});
js
大致就是這個(gè)樣子。
主要的是后臺(tái)傳輸數(shù)據(jù)的格式變化丈探。
比較一下 ajax
返回json
和jsonp
的格式:
{"message":"success", "code":"200","result":{"name":"test","id":1,"description":"11"}}
jsonp
返回的格式:
callback({"message":"success", "code":"200","result":{"name":"test","id":1,"description":"11"}})
在url
中callback
傳到后臺(tái)的參數(shù)是什么,callback
就是什么录择, jsonp
比json
外面有多了一層callback()
。
既然返回的數(shù)據(jù)結(jié)構(gòu)有區(qū)別,那么后臺(tái)的提供服務(wù)的方法也是要發(fā)生變化的隘竭。我使用的方法就是在HttpServletResponse
中進(jìn)行操作塘秦。
String value = callback + "(" + JSON.toJSONString(result) + ")";
HttpServletResponse.getOutputStream().write(value.getBytes("UTF-8"));
直接寫(xiě)到response
中,然后前臺(tái)正常操作动看。
關(guān)于json和jsonp之間的關(guān)系與區(qū)別 這篇文章講的很不錯(cuò)尊剔。