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("登陆成功");
}
}
上面的答案有帮助吗?如果还有问题,请提出来,如果对答案满意,请顶一下,并标记为采纳答案,谢谢!