ajax使用alert就能成功,没有使用alert就会失败

花生喂龙 2016-07-13 04:48:56
网上查了很多资料都是说要改成同步,但是我没有用jQuery啊,所以要怎么改成同步呢
原代码:
function loginSubmit(form){
if(form.username.value==""){
alert("请输入用户名!");
form.username.focus();
return false;
}
if(form.password.value==""){
alert("请输入密码!");
form.password.focus();
return false;
}
var param="username="+form.username.value+"&password="+form.password.value;
var loader=new net.AjaxRequest("UserServlet?action=login",deal_login,onerror,"POST",encodeURI(param));
}
function deal_login(){
var h=this.req.responseText;
h=h.replace(/\s/g,"");
alert(h);

if(h=="登陆成功!"){
alert("成功");
}else{
form.username.value="";
form.pwd.value="";
form.username.focus();
}
}
function onerror(){
alert("注意:您的操作有误");
}
采用了延时之后也是失败了
function loginSubmit(form){
var loader=new net.AjaxRequest("UserServlet?action=login",deal_login,onerror,"POST",encodeURI(param));
setTimeOut(function loginSubmit(){},2000);
}
换一种写法,成功了一次就失败了
setTimeout(function loginSubmit(form){
var loader=new net.AjaxRequest("UserServlet?action=login",deal_login,onerror,"POST",encodeURI(param));
},1000);
用了jQuery的话是这样,$.ajaxSettings.async = false,但我没用啊,这个加到哪里呢
...全文
385 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
花生喂龙 2016-07-14
  • 打赏
  • 举报
回复
引用 7 楼 syqh13 的回复:
[quote=引用 6 楼 qq_24435837 的回复:] [quote=引用 5 楼 huihuiyexing 的回复:] 系统登录一般不需要使用异步,后台filter拦截后判断逻辑,再重定向回来
—————————————————————— 不是很懂。。。我刚接触这些,而且这个我都快写完了,就剩一点点问题了[/quote] 初步判定就是同步和异步的问题[/quote] ———————————————————————— 但是我不知道怎么解决这个问题啊。。。
花生喂龙 2016-07-14
  • 打赏
  • 举报
回复
引用 8 楼 u010087908 的回复:
ajax 是异步操作。 你需要等待结果返回,再进行下一步操作。 不要用setTimeout()。 正确的做法,是在callback函数里执行后续操作。
$.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData
    })

var myfunction = function(){...}
—————————————————————— 能帮我看看9楼贴出的详细代码吗?你说的我不知道加到哪里啊,刚学这个,很蒙圈啊
花生喂龙 2016-07-14
  • 打赏
  • 举报
回复
我把代码贴详细点: 首页.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>首页</title> </head> <body bgcolor="#f0f0f0"> <div id="box"> <%@ include file="top.jsp" %> <%@ include file="login.jsp" %> </div> </body> </html> 其中的导航栏:top.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'top.jsp' starting page</title> <link rel="stylesheet" href="css/top.css" type="text/css"></link> </head> <body> <div id="notClickDiv"></div> <div id="top"></div> <div id="navigation"> <div style="float:left;color:#006700;"> <c:if test="${!empty sessionScope.userName}"> <b>   》  欢迎 ${sessionScope.userName}!</b> </c:if> <c:if test="${empty sessionScope.userName}"> <b>   》  欢迎!</b> </c:if> </div> <div style="float:right;text-align: center;"> <a href="">首页</a> <c:if test="${empty sessionScope.userName}">   |  <a href="javascript:Myopen('login')">登录</a>   |  <a href="#" onClick="Regopen('register')">注册</a>   |  <a href="forgetPassword.jsp">找回密码</a>   </c:if> <c:if test="${!empty sessionScope.userName}">   |  <a href="UserServlet?action=exit">退出登录</a> </c:if> </div> </div> </body> </html> 其中的登录页面:login.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="servlet.UserServlet"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>DiaryWeb</title> <link rel="stylesheet" href="css/login.css" type="text/css"></link> <script type="text/javascript" src="js/AjaxRequest.js"></script> </head> <body > <div id="login"> <form name="form" id="form" method="post" action=""> <div id="loginTitle">日记网——用户登录</div> <div id="loginCentent"> <table> <tr> <th>用户名:<input name="username" type="text"></th> <th><a href=".jsp">注册用户</a></th> </tr> <tr> <th>密 码:<input name="password" type="password"></th> <th><a href=".jsp">忘记密码</a></th> <tr> </table> <input name="submit" class="button" type="submit" onclick="loginSubmit(this.form)" value="登录"> <input name="close" class="button" type="button" value="关闭" onClick="myClose(login)"> </div> </form> </div> <script type="text/javascript"> function myClose(divID){ divID.style.display='none'; document.getElementById("notClickDiv").style.display='none'; } function Myopen(divID){ var isRn=true; var notClickDiv=document.getElementById("notClickDiv"); notClickDiv.style.display='block'; document.getElementById(divID).style.display='block'; var bWidth=document.documentElement.clientWidth; var bHeight=document.documentElement.clientHeight; var lWidth=document.getElementById(divID).offsetWidth; var lHeight=document.getElementById(divID).offsetHeight; if(isRn){ document.getElementById(divID).style.pixelLeft=(bWidth-lWidth)/2; document.getElementById(divID).style.pixelTop=(bHeight-lHeight)/2; } } function loginSubmit(form){ if(form.username.value==""){ alert("请输入用户名!"); form.username.focus(); return false; } if(form.password.value==""){ alert("请输入密码!"); form.password.focus(); return false; } var param="username="+form.username.value+"&password="+form.password.value; var loader=new net.AjaxRequest("UserServlet?action=login",deal_login,onerror,"POST",encodeURI(param)); alert("123"); } function deal_login(){ var h=this.req.responseText; h=h.replace(/\s/g,""); alert(h); if(h=="登陆成功!"){ alert("成功"); }else{ form.username.value=""; form.pwd.value=""; form.username.focus(); } } function onerror(){ alert("注意:您的操作有误"); } </script> </body> </html> 和登录相关的servlet.java package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import DAO.UserDAO; import model.User; public class UserServlet extends HttpServlet{ private static final long serialVersionUID = 1L; private UserDAO userDAO = null; public UserServlet() { super(); userDAO = new UserDAO(); } protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { this.doPost(request,response); } protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { String action = request.getParameter("action"); System.out.println("action="+request.getParameter("action")); if ("login".equals(action)) { this.login(request, response); }else if ("forgetPassword".equals(action)) { this.forgetPassword(request, response); } } private void login(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { User f = new User(); f.setUsername(request.getParameter("username")); f.setPassword(request.getParameter("password")); System.out.println("SERVLETusername="+request.getParameter("username")); System.out.println("f="+f); int r = userDAO.login(f); System.out.println("r="+r); if(r>0){ HttpSession session = request.getSession(); session.setAttribute("username",f.getUsername()); session.setAttribute("uid",r); request.setAttribute("returnValue","登陆成功!"); System.out.println("登陆成功!"); request.getRequestDispatcher("userMessage.jsp").forward(request,response); }else{ request.setAttribute("returnValue","输入的用户名或密码错误"); request.getRequestDispatcher("userMessage.jsp").forward(request,response);; } }
NANU-NANA 2016-07-13
  • 打赏
  • 举报
回复
ajax 是异步操作。 你需要等待结果返回,再进行下一步操作。 不要用setTimeout()。 正确的做法,是在callback函数里执行后续操作。
$.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData
    })

var myfunction = function(){...}
syqh13 2016-07-13
  • 打赏
  • 举报
回复
引用 6 楼 qq_24435837 的回复:
[quote=引用 5 楼 huihuiyexing 的回复:] 系统登录一般不需要使用异步,后台filter拦截后判断逻辑,再重定向回来
—————————————————————— 不是很懂。。。我刚接触这些,而且这个我都快写完了,就剩一点点问题了[/quote] 初步判定就是同步和异步的问题
花生喂龙 2016-07-13
  • 打赏
  • 举报
回复
引用 5 楼 huihuiyexing 的回复:
系统登录一般不需要使用异步,后台filter拦截后判断逻辑,再重定向回来
—————————————————————— 不是很懂。。。我刚接触这些,而且这个我都快写完了,就剩一点点问题了
huihuisweet 2016-07-13
  • 打赏
  • 举报
回复
系统登录一般不需要使用异步,后台filter拦截后判断逻辑,再重定向回来
duqian42707 2016-07-13
  • 打赏
  • 举报
回复
你这种写法我就不懂了,没用过JavaScript实现ajax,我都是用jquery实现的。。
花生喂龙 2016-07-13
  • 打赏
  • 举报
回复
引用 2 楼 duqian42707 的回复:
new net.AjaxRequest 这是用了什么插件吗? 我一般用jquery的ajax方法:

$.ajax({
url:'',
data:{},
dataType:'json',
success:function(){},
async:false
})
最后async:false就是同步的意思
—————————————————— 没有用插件啊,jar包都没用,那个只是定义了一个全局变量而已。但是我没有用$.ajax这种形式啊 我的js代码: var net=new Object(); net.AjaxRequest=function(url,onload,onerror,method,params){ this.req=null; this.onload=onload; this.onerror=(onerror) ? onerror : this.defaultError; this.loadDate(url,method,params); } net.AjaxRequest.prototype.loadDate=function(url,method,params){ if (!method){ method="GET"; } if (window.XMLHttpRequest){ this.req=new XMLHttpRequest(); } else if (window.ActiveXObject){ this.req=new ActiveXObject("Microsoft.XMLHTTP"); } if (this.req){ try{ var loader=this; this.req.onreadystatechange=function(){ net.AjaxRequest.onReadyState.call(loader); } this.req.open(method,url,true); if(method=="POST"){ this.req.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); this.req.setRequestHeader("x-requested-with", "ajax"); } this.req.send(params); }catch (err){ System.out.println("如果提交方式为POST"); this.onerror.call(this); } } } net.AjaxRequest.onReadyState=function(){ var req=this.req; var ready=req.readyState; if (ready==4){ if (req.status==200 ){ this.onload.call(this); }else{ System.out.println("重构回调函数"); this.onerror.call(this); } } } net.AjaxRequest.prototype.defaultError=function(){ alert("错误数据\n\n回调状态:" + this.req.readyState + "\n状态: " + this.req.status); }
duqian42707 2016-07-13
  • 打赏
  • 举报
回复
new net.AjaxRequest 这是用了什么插件吗? 我一般用jquery的ajax方法:

$.ajax({
url:'',
data:{},
dataType:'json',
success:function(){},
async:false
})
最后async:false就是同步的意思
花生喂龙 2016-07-13
  • 打赏
  • 举报
回复
在一个帖子里看到了这样的方法,还是不行 var delayInterval = 30000; window.setTimeout(loginSubmit, delayInterval);

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧