这个是表单<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head><body><form action="abc.php" method="post" name="form" onSubmit="return check_form()"/>
用户名<input type="text" name="username" id="username" />
验证码<input type="text" name="identifying_code" id="identifying_code"/>
<input type="submit" name="login" value="登录">
</form>
<div id="tishi"></div>
<script language="javascript" src="js/xmlhttprequest.js"></script>
<script language="javascript" src="js/js2.js"></script>
</body>
</html>
这个是xmlhttprequest.js页面var xmlhttp = false;
if (window.XMLHttpRequest) {  //Mozilla、Safari等浏览器
xmlhttp=new XMLHttpRequest();

else if (window.ActiveXObject) {  //IE浏览器
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
   } catch (e) {}
}
}
这个是js2.js页面里面有我标记的路线可以看到整个执行的过程。var flag;
function check_form(){

    var username=document.getElementById('username').value;
var identifying_code=document.getElementById('identifying_code').value;
url='login_chk.php?username='+username+'&identifying_code='+identifying_code;
alert('这里第1步');
xmlhttp.open('get',url,true);
alert('这里第2步');
xmlhttp.onreadystatechange = function(){
alert('这里第5步');
if(xmlhttp.readyState == 4){
alert('这里第6步');
if(xmlhttp.status == 200){
alert('这里第7步');
msg = xmlhttp.responseText;
alert('这里第8步'); if(msg==1){
document.getElementById("tishi").innerHTML="<font color='#FF0000'>输入正确正在跳转</font>";
flag=true; }
else{
document.getElementById("tishi").innerHTML="<font color='#FF0000'>用户名或者密码错误</font>";
flag=false;
}
alert('这里第9步');

    }
    }

//alert(flag);
}
xmlhttp.send(null);
alert('这里第3步');


if(flag==true){
alert('这里是true');
alert(flag);
return true;
}
else {
alert('这里第4步');
alert(flag);
return false;
}} 这个是login_chk.php页面<?php
if(strcmp($_GET['username'],'abcd')==0&&strcmp($_GET['identifying_code'],'abcd')==0){
$msg=1;}
else{
$msg=0;
}echo $msg;?>
最重要的是要取得check_form的返回值,才能决定表单是否能提交。求高手更改代码取到check_form的返回值

解决方案 »

  1.   

    你的代码没问题啊
    我测试过能够正常提交到abc.php
      

  2.   

    强烈要求楼主使用jquery or prototype !
      

  3.   

    我倒是建议在JS没熟悉到一定程度前先用原生JS。
      

  4.   

    xmlhttp.open('get',url,true);
    这是异步通讯,所以你要定义接受返回数据的回调函数
    xmlhttp.onreadystatechange = function(){
    而这个回调函数的返回值你是接收不到的所以你的 check_form 函数应返回 false 来阻止表单提交
    而在回调函数中有条件的调用表单的 submit 方法来完成提交
      

  5.   

    真就对JS不感冒,既多又乱,建议用jquery
      

  6.   

    五楼的问下,能具体跟我说下不。有人建议用jquery,但我感觉这个应该有解决办法吧
      

  7.   

    jquery 是将常用的 js 代码封装起来的一个框架具体做法我#5不是已经说了吗?比如你的 form 的id为form
    那么 document.getElementById("form").submit(); 就是提交了
      

  8.   

    5楼正解;
    具体为:
    function()
    {
       ...
       xmlHttp.onreadystatechange=function()
       {
          if(xmlHttp.readyState==4)
          {
             if(xmlHttp.status==200)
             {
                if(...){form.submit()}
             }
          }
       }
       return false;
    }