Knimet 2015-08-27 13:12 采纳率: 33.3%
浏览 1653
已采纳

关于Ajax xmlhttp的问题

我想实现的功能是这样的,利用ajax的异步请求在提交表单之前实现对一个输入框中数据的验证,期待实现的效果是点击提交按钮,如果输入数据符合要求,就提交表单。但是现在实现的效果是点击提交按钮,在校验输入数据符合要求后,还需要再点击一次才能提交表单。
代码如下:
jsp:
< form action="formaction.action" method="post" onsubmit="return formsubmit()">
< input type="submit" value="提交表单">< /form>
js:

 function formsubmit(){
    var xmlhttp;
    xmlhttp=ajaxfun();
    var datavalue=document.getElementById("data").value;
        var url="datacheckaction?data="+datavalue+"&time="+(new Date().getTime());
        xmlhttp.open("post",url,true);  
      xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");  
      xmlhttp.send(null);
      xmlhttp.onreadystatechange=function(){
            if(xmlhttp.readyState==4 && xmlhttp.status==200){   
                document.getElementById("spandata").innerHTML=xmlhttp.responseText;
            }
        }
    }
    if(document.getElementById("spandata").innerHTML==""){
    return true;
    }else{
    return false;
    }
}

这个xmlhttp.responseText测试了没问题,数据校验通过是个"",校验不通过是个"wrong"。。。
用span和alert测试了几次,也有一些想法但是很快就都否定了,不知道问题在哪里。。。
忘记补充一点,有一个想法是这样的。。spandata这个地方在jsp页面上的初始值有,是"此项不可为空",我觉得最有可能的问题是formsubmit()这个函数的最后几行,判断spandata是否为空是在得到异步请求结果之前,应该是这样。。。但是不知道怎么解决

  • 写回答

5条回答 默认 最新

  • 路痴的旅行 2015-08-27 14:55
    关注

    这个就是异步传输需要考虑的,因为异步传输需要较多时间,结果返回之前,主程序还是运行的,即if(document.getElementById("spandata").innerHTML==""){
    return true;
    }else{
    return false;
    }
    会继续运行,结果返回之后,这个程序已经先运行完了,所以会出现这样的结果
    解决方法可以是,直接在里面对返回的结果在函数里面进行判断,然后直接跳转页面,例如window.location="地址",这种方式进行跳转

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算