AJAX中Get請求報錯404的原因以及解決辦法
背景環(huán)境
已學(xué)習(xí)java基礎(chǔ),html,css,js,jquery,bootstrap,layui,maven,servlet和jsp,剛進入spring的學(xué)習(xí),了解了控制反轉(zhuǎn)和依賴注入后,自己嘗試將一個使用layui開發(fā)的前端項目,整合到spring中實現(xiàn)前后端簡單的交互,借此來理清前后端交互的主要流程。
項目結(jié)構(gòu)

主要項目結(jié)構(gòu)
- java
- com.sisyphus
- vo
- ResultInfo //數(shù)據(jù)封裝成的對象
- LoginServlet //處理請求的后端代碼
- webapp
- html //存放頁面
- login.jsp
- js //jquery
- layui //前端項目頁面
- index.jsp //首頁
在介紹完項目的結(jié)構(gòu)之后,對項目做一個簡單的說明,并展示主要代碼:
通過拷貝了前端項目的一個表單,表單中包含一個text類型的input,一個password類型的input,還有一個button類型的按鈕,通過onclick屬性調(diào)用函數(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){ //操作成功
//跳轉(zhuǎn)
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ù)并進行校驗檢查,最后轉(zhuǎn)換成相應(yīng)的數(shù)據(jù)類型進行響應(yīng),寫出給前臺。
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ù)轉(zhuǎn)換成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時預(yù)先拼接上了自己所在的目錄html。
解決辦法1
將login.jsp放在webapp根目錄下,但是顯然當我們項目的頁面越來越多之后,都放在根目錄下很不合適,于是我推薦采取第二種辦法:
解決辦法2
在ajax請求的url前加上…/返回根路徑進行前端請求路徑的匹配:
//發(fā)送請求
$.ajax({
type:'get',
url:'../userlogin',
/*url:'userlogin',*/
data:{
username:username,
password:password
},
dataType:'json',
至此問題圓滿解決。
總結(jié)
到此這篇關(guān)于AJAX中Get請求報錯404的原因以及解決辦法的文章就介紹到這了,更多相關(guān)AJAX Get請求報錯404內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實現(xiàn)163郵箱發(fā)送郵件到qq郵箱成功案例
這篇文章主要為大家分享了java實現(xiàn)163郵箱發(fā)送郵件到qq郵箱成功案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-05-05
mybatis逆向工程與分頁在springboot中的應(yīng)用及遇到坑
最近在項目中應(yīng)用到springboot與mybatis,在進行整合過程中遇到一些坑,在此將其整理出來,分享到腳本之家平臺供大家參考下2018-09-09
使用Spring處理x-www-form-urlencoded方式
這篇文章主要介紹了使用Spring處理x-www-form-urlencoded方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11

