AJAX中Get請求報錯404的原因以及解決辦法
背景環(huán)境
已學習java基礎,html,css,js,jquery,bootstrap,layui,maven,servlet和jsp,剛進入spring的學習,了解了控制反轉和依賴注入后,自己嘗試將一個使用layui開發(fā)的前端項目,整合到spring中實現(xiàn)前后端簡單的交互,借此來理清前后端交互的主要流程。
項目結構
主要項目結構
- java
- com.sisyphus
- vo
- ResultInfo //數(shù)據(jù)封裝成的對象
- LoginServlet //處理請求的后端代碼
- webapp
- html //存放頁面
- login.jsp
- js //jquery
- layui //前端項目頁面
- index.jsp //首頁
在介紹完項目的結構之后,對項目做一個簡單的說明,并展示主要代碼:
通過拷貝了前端項目的一個表單,表單中包含一個text類型的input,一個password類型的input,還有一個button類型的按鈕,通過onclick屬性調用函數(shù),取到用戶輸入的數(shù)據(jù)并進行校驗,滿足校驗后發(fā)送ajax請求,將data返回指定的后臺url。
function login(){ //獲取數(shù)據(jù) var username = $("#username").val(); var password = $("#password").val(); console.log(username) console.log(password) //校驗參數(shù) if(isEmpty(username)){ $("#sp").html("用戶名不能為空"); return; } if(isEmpty(password)){ $("#sp").html("密碼不能為空"); return; } //發(fā)送請求 $.ajax({ type:'get', /*url:'../userlogin',*/ url:'userlogin', data:{ username:username, password:password }, dataType:'json', success:function(data){ if(data.code == 1){ //操作成功 //跳轉 console.log(data); alert("登錄成功") window.location.href = "../index.jsp"; }else{ //操作失敗 console.log(data); $("#sp").html(data.msg); } } }); } //非空校驗 function isEmpty(str){ if(str == undefined || str.trim() == ""){ return true; } return false; }
在后臺中創(chuàng)建返回值類型對象,接收數(shù)據(jù)并進行校驗檢查,最后轉換成相應的數(shù)據(jù)類型進行響應,寫出給前臺。
response.setContentType("application/json;charset=UTF-8"); //創(chuàng)建一個返回值對象 ResultInfo resultInfo = new ResultInfo(); resultInfo.setCode(1); //接收參數(shù) String username = request.getParameter("username"); String password = request.getParameter("password"); System.out.println(username+"----"+password); //參數(shù)校驗 if(username == null || "".equals(username.trim())){ resultInfo.setCode(0); resultInfo.setMsg("賬號不存在"); } if(password == null || "".equals(password.trim())){ resultInfo.setCode(0); resultInfo.setMsg("賬號不存在"); } if(!"zhangsan".equals(username)){ resultInfo.setCode(0); resultInfo.setMsg("用戶不存在"); } if("zhangsan".equals(username)&&!"123456".equals(password)){ resultInfo.setCode(0); resultInfo.setMsg("密碼有誤"); } //將數(shù)據(jù)轉換成json格式的數(shù)據(jù) String ri = JSON.toJSONString(resultInfo); //寫出json數(shù)據(jù) response.getWriter().write(ri);
問題成因
在第一次運行項目時,我的login.jsp在html目錄中,而在Java代碼中的注解如下:
@WebServlet("/userlogin")
在jsp文件的ajax請求中url標識將請求前臺的地址,按照當前的注解我們會出現(xiàn)get404:
我們點進去觀察:
發(fā)現(xiàn)它的地址是war包下的html下的userlogin,很明顯這個路徑是不對的,我們在注解中只標記了@WebServlet(“/userlogin”)。于是我們可以認為出現(xiàn)get404的原因是ajax請求到錯誤的路徑。
很明顯ajax在尋找url時預先拼接上了自己所在的目錄html。
解決辦法1
將login.jsp放在webapp根目錄下,但是顯然當我們項目的頁面越來越多之后,都放在根目錄下很不合適,于是我推薦采取第二種辦法:
解決辦法2
在ajax請求的url前加上…/返回根路徑進行前端請求路徑的匹配:
//發(fā)送請求 $.ajax({ type:'get', url:'../userlogin', /*url:'userlogin',*/ data:{ username:username, password:password }, dataType:'json',
至此問題圓滿解決。
總結
到此這篇關于AJAX中Get請求報錯404的原因以及解決辦法的文章就介紹到這了,更多相關AJAX Get請求報錯404內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
java實現(xiàn)163郵箱發(fā)送郵件到qq郵箱成功案例
這篇文章主要為大家分享了java實現(xiàn)163郵箱發(fā)送郵件到qq郵箱成功案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-05-05mybatis逆向工程與分頁在springboot中的應用及遇到坑
最近在項目中應用到springboot與mybatis,在進行整合過程中遇到一些坑,在此將其整理出來,分享到腳本之家平臺供大家參考下2018-09-09使用Spring處理x-www-form-urlencoded方式
這篇文章主要介紹了使用Spring處理x-www-form-urlencoded方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11