ajax
$.ajax({url:"https://www-xxx.com/xxx/getCounselorDetailByHxCode",data: {xxx:x},dataType : 'jsonp',jsonp:"callback", type:'post',error: function(data) { console.log(data);},success:function(data){//alert("suc");console.log(data);},});
其中 dataType指定為jsonp,jsonp 指定為 callback(隨意),然後看struts2的配置:
<action name="getCounselorDetailByHxCode"class="xxx" method="getCounselorDetailByHxCode"><result name="success" type="json"><param name="callbackParameter">callback</param><param name="noCache">true</param></result></action>
其中,這一條
<param name="callbackParameter">callback</param>
中callback與ajax中jsonp欄位設定相同
列印出來的 data 是 structs請求類執行個體的所有能夠get的成員對象:
HXCodeList: null
HXType: null
content: null
counselorDetail: "success"
counselorDetailByHxCode: "success"
spResult: Object
typetypeStr: null
urlStr: null
userHXCode: "zeKNVeDc208"
userHXSubCode: null
userInfoId: null
__proto__: Object
js中,
data = data.spResult;
con += '<br><img src="' + data.body.counselorMap.userIcon + '" width="150px" />';
來訪問結果
201611.1 補充:
jsonp方式跨域只能是字串,所以struts在返回時應指定字串變數
<result name="success" type="json"><param name="root">jsonpResult</param><param name="callbackParameter">URGOO_CALLBACK</param><param name="noCache">true</param></result>
其中,jsonpResult 為 String 類型
public String actionMethod() throws Exception {spResult = serviceMethod();jsonpResult = JsonUtils.convert(spResult) ;return SUCCESS;}
除此之外,還有一種方法可以指定跨域:
在 actionMethod中,
HttpServletResponse response = ServletActionContext.getResponse();response.setHeader("Access-Control-Allow-Origin", "*");
此時的前端代碼完全不用改變。