亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

struts2返回json,前端jsonp獲取為null?

struts2返回json,前端jsonp獲取為null?

拉莫斯之舞 2019-01-18 21:52:46
前端采用vue+webpack,監聽端口8000后端采用java(struts2+hibernate+spring)的組合,tomcat監聽端口8080 前端想獲取后端返回來的json數據,卻獲取為null?初步判斷為后端的問題,求解決方案用jquery的ajax方法測試過同樣也獲取為null 前端顯示數據組件的jsonp代碼: jsonp: function(url, data={}, callbackName = 'callback') { return new Promise((resolve, reject) => { console.log(url) console.log(data) console.log(callbackName) window.__onGetData__ = data => resolve(data) console.log(window.__onGetData__) let queryString = Object.keys(data).map(k => `${k}=${data[k]}`).join(`&`) console.log(queryString) let script = document.createElement('script') document.head.appendChild(script) script.src = `${url}?${callbackName}=__onGetData__` script.addEventListener('error', ()=>{ reject('load error')}) document.head.removeChild(script) }) }, showData: function(){ this.jsonp('http://localhost:8080/QAsys/user_getAll') .then(data =>{ console.log(data) tableData = data; }).catch(err => { console.log(err) }) } 返回json的action代碼: public class UserAction extends ActionSupport implements ServletRequestAware, ServletResponseAware { private HttpServletRequest request; //request-api private HttpServletResponse response; private ObjectMapper mapper = new ObjectMapper();//jackson 變量 private String result = new String();//結果字符串 private Page page = new Page(); //保存查詢結果的頁數信息 public void setServletRequest(HttpServletRequest request) { this.request = request; } public void setServletResponse(HttpServletResponse response){ this.response = response;} public void setResult(String result){ this.result = result; } @Autowired private UserService userService; public void setUserService(UserService userService) { this.userService = userService; } public String getAllUser(){ //翻到首頁 page.setOffset(0); page.setLength(10); response.setContentType("text/plain"); response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Access-Control-Allow-Origin", "*");//添加跨域訪問 response.setDateHeader("Expires", 0); try{ List<User> list = userService.getAllUser(page.getOffset(), page.getLength()); page.setMax(list.size());//設置數據量的大小 //將查詢結果轉換成json字符串 result = mapper.writeValueAsString(list); System.out.println(result); PrintWriter out = response.getWriter(); String jsonpCallback = request.getParameter("callback");//客戶端請求參數 out.println(jsonpCallback+"("+result+")");//返回jsonp格式數據 }catch (Exception e){ e.printStackTrace(); } return SUCCESS; } struts.xml <struts> <constant name="struts.i18n.encoding" value="UTF-8"></constant> <!--<constant name="struts.action.excludePattern" value="../webapp/static/*/.*?" />--> <!-- Struts2在2.5版本后添加strict-method-invocation(嚴格方法訪問),默認為true,不能使用動態方法調用功能,故需設為false --> <package name="default" extends="struts-default" namespace="/" strict-method-invocation="false"> <result-types> <result-type name="json" class="org.apache.struts2.json.JSONResult"/> </result-types> <!-- CRUD用戶信息 --> <action name="user_*" class="org.ssh.action.UserAction" method="{1}User"> <result name="success" type="json"> <param name="root">result</param> <param name="callbackParameter">callback</param> </result> </action> </package> </struts>
查看完整描述

1 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

原來是自己一直在轉牛角尖 獲取不了數據跟前后端約定的回調函數名稱有關,還有不需添加response的頭文件信息(具體原理沒有研究過)

查看完整回答
反對 回復 2019-02-12
  • 1 回答
  • 0 關注
  • 829 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號