1. 程式人生 > >使用AJAX向後臺傳資料,為什麼會進入error?

使用AJAX向後臺傳資料,為什麼會進入error?

問題:用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,後臺正常解析資料,正常傳送資料,但是前臺無法接受

解決方法:

見本文開頭。