HTTP403使用Ajax的POST方法向后台传输数据出现的问题的解决方案
使用Java MVC,結(jié)合前端Ajax代碼,傳輸json串。
需求:通過(guò)前端的Ajax方法,向后臺(tái)POST一個(gè)JSON串。
之前使用的是GET方法,但是需要傳輸?shù)臄?shù)據(jù)太長(zhǎng),GET已經(jīng)無(wú)法滿足需求,因此改成POST方法。
在這種情況下,403錯(cuò)誤的原因十有八九是csrf。
GET為什么能成功呢?因?yàn)镚ET方法不需要CSRF,而POST必須需要它!
在jsp頁(yè)面需要加上這樣一行代碼:
<input type = "hidden" name = "${_csrf.parameterName}" value="${_csrf.token}" />ajax代碼如下:
let csrf = $('input[name="_csrf"]').attr('value');//讀取頁(yè)面的csrf值 postAjax(host + '/createfile',csrf,JSON.stringify(data));postAjax = function(url,token, encData){var headers = {"X-CSRF-TOKEN": token} //json的格式return new Promise(function(resolve,reject){$.ajax({type: "post",url: url,headers:headers, //將csrf的值加在header里面contentType: "application/json;charset=utf-8",data: JSON.stringify(encData),dataType: "json",success: function (result) {resolve();},error: function(jqXHR, text, e){console.log('e'+e);}}); }); }在調(diào)試過(guò)程中可能仍然會(huì)遇到403的錯(cuò)誤,問(wèn)題一般出在csrf的格式上, 可以使用console.log調(diào)試幾次, 就能知道所傳輸?shù)臄?shù)據(jù)格式是否有問(wèn)題啦~
后臺(tái)對(duì)應(yīng)的Java代碼Controller類:
@ResponseBody @RequestMapping(value = "/createfile") public JSONObject createPage(HttpServletRequest request) throws AuthenticationException, IOException, ServletException {System.out.println("POST"); ......return ret; }這里可以寫(xiě)成
@RequestMapping(value = "/createfile" , method = {RequestMethod.POST})也可以不寫(xiě),如果不寫(xiě)后面的method,則默認(rèn)同時(shí)支持GET和POST方法
注意:返回值必須是json格式, 這是因?yàn)樵贏jax中的這句
contentType: "application/json;charset=utf-8"
如果返回的是string,則會(huì)報(bào)語(yǔ)法的錯(cuò)誤,如:
SyntaxError: Unexpected token c in JSON at position 0(…)
如果遇到接受的值為null的問(wèn)題, 可能是由于數(shù)據(jù)的格式不正確, 如果格式不是java所期待的格式,那么無(wú)法解析.
總結(jié)
以上是生活随笔為你收集整理的HTTP403使用Ajax的POST方法向后台传输数据出现的问题的解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 所谓的SaaS服务到底是什么?
- 下一篇: dya19第十章线程