<script language="javascript">
 var canSubmit = false ;
 function formCheck() 

  getResult("TDJY_SCANDOC","SCANDATANAME");

  if(canSubmit==false){
  return false;
}
else{
  return true;
}


    //构造Ajax对象,获取服务器端对应的信息
    //首先是取得XmlHttpRequest;
    //然后设置该请求的url:req.open("GET",url, true);
    //接着设置请求返回值的接收方法:req.onreadystatechange = complete;
    //该返回值的接收方法为——complete();
    //最后是发送请求:req.send(null);

    function getResult(tblName,attrName) 
    {
var url = "AjaxConn.jsp?tblName=" + tblName + "&attrName=" + attrName; 
       if (window.XMLHttpRequest) 
        { 
xmlHttp = new XMLHttpRequest(); 
       }
        else if (window.ActiveXObject) 
        { 
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
       } 
       if(xmlHttp)
        { 
xmlHttp.open("GET",url, true); 
xmlHttp.onreadystatechange = function() {complete();} 
xmlHttp.send(null); 
       } 
 } 
//返回值接收方法:complete(),
  //首先判断是否正确返回,如果正确返回,用DOM对返回的XML文件进行解析。
  //得到city的值以后,再通过buildSelect(str,sel)方法赋值到相应的选择框里头去。
  function complete()
  {
if (xmlHttp.readyState == 4) 

var rtnStr = xmlHttp.responseText;
//取出返回值中,所需的字段值
rtnStr = rtnStr.substring(rtnStr.indexOf("<body>")+6);
rtnStr = rtnStr.substring(0,rtnStr.indexOf("</body>"));
rtnStr = rtnStr.replace(/\s/g,"!")
if(rtnStr == null || rtnStr == "!!!!!!!"){
    alert("尚未上传扫描件");
    canSubmit = false;
}
else{
    alert("提交成功");
    canSubmit = true;
}

}本来是想通过canSubmit传递的值,来判断数据是否存在相应的扫描件,不存在不允许上传,但是好像canSubmit的值没发生改变还是false,这个是怎么回事?

解决方案 »

  1.   

    应该不会,按说是可以的,你的方式也对,现在建议你在ff下看看firebug报错不报错,可能是你别的语句错误了,js代码就不继续执行了
      

  2.   

    现在建议你在ff下看看firebug报错不报错???什么FF
      

  3.   

    FF  火狐  
    你最基本要学会用firebug.
      

  4.   

    还有一个问题,就是rtnStr的值好像保存的是上一次的值,结果后一次没有扫描,他也显示上传成功,怎么刷新那个rtnStr的值呢?
      

  5.   

    你那个方法调用的就有问题.  function formCheck()  
    {  
      getResult("TDJY_SCANDOC","SCANDATANAME");  if(canSubmit==false){
    return false;
    }
    else{
    return true;
    }}  
    这个方法调用getResult()方法的时候, 不会停下来等你的Ajax走完的,会直接执行下一行代码,if(){}
    ,所以,不管你Ajax返回来是什么值,canSubmit的值都是初始化的false,明白了吧 。你可以在Ajax返回后根据返回值做相应的操作  这样就不会有问题了。
      

  6.   


    问题是那个判断的我在后面做了,但是如何能让  function complete()直接返回ture或者false,使得Form可以提交或者不可以提交呢?
      

  7.   

    我想了个办法在function formCheck() {
    function getResult();
    function complete();if(canSubmit==false){
    return false;
    }
    else{
    return true;
    }
    }
    可是显示正常了,去数据库看,本来不该加入的数据还是进去了,也就是说这个条件没起到作用,只要点提交不管alert显示的是什么都可以入库
      

  8.   

    你在提交的时候调用getResult("TDJY_SCANDOC","SCANDATANAME")方法。然后,在complete()方法里对返回值做判断,如果满足你的条件,就提交,否则 不提交  完事了呗  
      

  9.   

    能否详细点,“在complete()方法里对返回值做判断,如果满足你的条件,就提交,否则 不提交 完事了呗”,这个我也想啊,可是不知道怎么做
      

  10.   

    就是不用formcheck()返回,在complete里面做手脚吧,但是我不知道怎么做手脚
      

  11.   

    查看下ajax调用 同步和异步的区别 这个是影响代码运行顺序的
      

  12.   


    我把异步改成了同步,但是仍然能提交:
    。onSubmit="return formCheck();"。
    var canSubmit = false;
     function formCheck() 
     
    { getResult("TDJY_SCANDOC","SCANDATANAME");

    if(canSubmit==false){
      alert("尚未上传扫描件");
      return false;
    }
    else{
      alert("提交成功");
      return true;
    }
     } 
    canSubmit已经在上面提到的complete中赋值了,当不满足条件时:能正确的显示“尚未上传扫描件”,照理说应该返回FALSE,但是进数据库一查,还是提交了,这是怎么回事?