Ajax既不执行success方法也不执行error方法

问题描述:

客户端代码
$("#imgLogin").click(function () {
debugger;
var name = $("#txtName").val();
var pwd = $("#txtPwd").val();
var validate = $("#txtValidate").val();

            $.ajax({
                type: "post",
                url: "Login.asmx/UserLogin",
                data: JSON.stringify({ "_name": name, "_pwd": pwd, "_validate": validate }),
                contentType: "application/json;charset=utf-8",
                dataType:"json",
                success: function (value) {
                    if (value == "1") {
                        alert("登陆成功");
                    }
                },
                error: function () {
                    alert("系统错误");
                }
            });
        });

服务器端代码:
[WebMethod(EnableSession = true)]
public string UserLogin(string _validate,string _name,string _pwd)
{

        int flag = 0; //flag为0表示验证码错误,为1表示登陆成功,为2表示密码错误


        if (_validate.ToUpper() == Session["code"].ToString().ToUpper())
        {
            try
            {
                string _sqlStr = "select * from [user] where name='" + _name + "' and pwd='" + _pwd + "'";
                DBHelper _helper = new DBHelper("sqlConStr");
                if (_helper.ExecuteQuery(_sqlStr).Rows.Count>0)
                {
                    Session["userName"] = _name;
                    Session["userID"] = _helper.ExecuteQuery(_sqlStr).Rows[0]["ID"].ToString();
                    flag = 1;
                }
                else
                {
                    flag = 2;
                }
            }
            catch (Exception _exception)
            {
                flag = 2;
                throw _exception;
            }

        }
        else
        {
            flag = 0;
        }

        return "{'flag':" + flag.ToString() + "}";

        //return flag.ToString();
    }

JSON解析的时候字符串需要用双引号,单引号会引起解析出错。你可以按F12打开浏览器的开发者工具看看控制台是否有错误。
改成return "{""flag"":" + flag.ToString() + "}";试试

看是否有请求到了后台,如果没有,那么应该是前台的这段代码问题

data: JSON.stringify({ "_name": name, "_pwd": pwd, "_validate": validate }),

可以直接写成:
data:{ "_name": name, "_pwd": pwd, "_validate": validate },

具体的问题,你可以通过火狐去调试~!

执行了success了,只是value为json对象。。(dataType:"json",),你那json对象和1比肯定是false的了。。而且asp.net的ws返回的json只包含一个d属性

success:function (value) {
    alert(value); //输出{"d":"{'flag':0/1}"}
    value = eval('(' + value.d + ')'); //ws返回的是string,d属性是string,还需要eval转换为json对象才行
    if (value.flag == "1") {//
        alert("登陆成功");
    }
}

上面的答案有帮助吗?如果还有问题,请提出来,如果对答案满意,请顶一下,并标记为采纳答案,谢谢!