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条)

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题