使用AJAX向後臺傳資料,為什麼會進入error?
阿新 • • 發佈:2018-12-22
問題:用ajax向後臺傳值,正常是根據伺服器的響應來決定進入success或者進入error,但是隻要執行ajax,不等後臺響應,直接進入error;然而後臺接受資料正常;
解決方法:(不要對號入座)
html:
<button type="submit" class="btn btn-login login disabled" id="login">登入</button>
將type改成button就ok了!
具體程式碼如下
今天做一個登入頁面時,前臺頁面通過ajax將帳號和密碼傳送至伺服器:
//data物件儲存的是帳號密碼資訊 var _username = $.trim($("#username").val()), _pwd = $.trim($("#password").val()); var data = { user_name: _username, user_password: _pwd };
ajax程式碼如下:
$.ajax({ type: "POST", url: "http://localhost:8080/testLogin", async: true, data: JSON.stringify(data), //dataType:"jsonp", processData: false, success: function (response) { if (response !== "") { //處理response var json = response.replace(/'/g, '"'); var obj = JSON.parse(json); //寫入cookie $.cookie("login_status", obj.status); $.cookie("user_name", obj.user_name); $(location).attr("href", "index.html"); } else { alert("使用者名稱或密碼錯誤"); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest.status); alert(XMLHttpRequest.readyState); alert(textStatus); } });
如果伺服器接受並處理data,會返回一段json字串,後臺用servlet的dopost方法來處理,程式碼如下:
一、解析json步驟:
1,匯入fastjson jar包
2,建立JSONObject物件:
JSONObject jo = JSON.parseObject(json);
3,根據鍵名獲取值,鍵名就是在js程式碼中建立data物件時候的“屬性名”
4,交給ServiceUserDAOImpl(和資料庫互動類)處理,User是自定義的實體類
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { BufferedReader br = new BufferedReader(req.getReader()); String json = br.readLine(); //解析json,根據鍵獲取值 JSONObject jo = JSON.parseObject(json); String user_name = jo.getString("user_name"); String user_password = jo.getString("user_password"); //到資料庫中查詢user是否存在 ServiceUserDAOImpl dao = new ServiceUserDAOImpl(); //準備傳送data回瀏覽器 PrintWriter pw = resp.getWriter(); resp.setCharacterEncoding("UTF-8"); User user = dao.selectBy(User.class,"select * from tb_user where user_tel = ? and user_password = ?", user_name,user_password); if (user != null) { //String data =JSON.toJSONString(user); //上面方法會去掉空值,如果需要保留null,需要設定Fastjson的SerializerFeature序列化屬性, // 將WriteMapNullValue——–是否輸出值為null的欄位,預設為false //String data =JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty); //System.out.println(data); String uname = user.getUser_nickname(); String data = "{'status':'true','user_name':'" + uname + "'}"; pw.write(data); pw.close(); } }
處理結果:
前臺直接進error,後臺正常解析資料,正常傳送資料,但是前臺無法接受
解決方法:
見本文開頭。