测试环境发现了一个bug,接口在请求成功之后依然会弹出error()方法中的消息,网上试了各种方法比如去掉dataType,打印error参数结果都不好使。
最后发现ajax请求设置了async: false同步属性,去掉这个参数就好了,代码如下
$.ajax({
type: "post", // 请求方式
url: "<%=ucenterUrl%><%=EncryptLink.encryptLink("/注册接口",-1)%>",
data: JSON.stringify({"phone": username, "password": password, "parentId": "<%=parentID%>", "code": checkcode, "registerName": name}),
//async: false, // 是否异步注释掉这行代码为了接口请求一直进error的问题
timeout: 20000, // 超时时间:3秒
dataType: "json",
contentType: "application/json; charset=utf-8",
// 请求成功后的回调函数 data为json格式
success: function (data) {
try {
dataObj = eval("(" + data + ")");//转换为json对象
} catch (e) {
dataObj = data;
}
if (dataObj.status == "200") {
$.ajax({
type: "post",
url: "<%=ucenterUrl%><%=EncryptLink.encryptLink("/登录接口",-1)%>",
data: JSON.stringify({"phone": username, "password": password, "userId": "<%=userId%>"}),
//async: false, // 是否异步
timeout: 20000, // 超时时间:3秒
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
try {
dataObj = eval("(" + data + ")");//转换为json对象
} catch (e) {
dataObj = data;
}
if (dataObj.status == "200") {
$("#circlecon").hide();
var userId = dataObj.body.id;
var token = dataObj.body.token;
$.cookie("userId", userId);
name = encodeURIComponent(name);
var returnHref = encodeURIComponent("<%=returnHref%>");
// 修改注册页面跳转路径
window.location.href = encodeURI("<%=path%>/html5/loginNew/authentication.jsp?userId=" + userId + "&activityId=<%=activityId%>&name=" + name + "&isReg=" + isReg + "&activityType=" + activityType+"&returnHref="+returnHref+"&token="+token);//跳转认证页面
}
if (dataObj.status == "500") {
$("#circlecon").hide();
//$("#login").attr("href", "javascript:login()");
$("#logmsg").html(dataObj.message);
$("#logmsg").slideDown();
}
},
error: function () {
// ajax请求出错执行的内容
$("#circlecon").hide();
alert('请求超时,请稍后重试!')
}
});
}
if (dataObj.status == "500") {
$("#circlecon").hide();
$("#regMsg").html(dataObj.message);
$("#regMsg").slideDown();
}
},
// 请求出错的处理
error: function () {
$("#circlecon").hide();
alert('请求超时,请稍后重试!')
}
});
网友评论