使用AJAX向后台传数据,为什么会进入error?

2 篇文章 0 订阅
1 篇文章 0 订阅

问题:用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,后台正常解析数据,正常发送数据,但是前台无法接受

解决方法:

见本文开头。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值