程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> j2ee-關於Ajax xmlhttp的問題

j2ee-關於Ajax xmlhttp的問題

編輯:編程綜合問答
關於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是否為空是在得到異步請求結果之前,應該是這樣。。。但是不知道怎麼解決

最佳回答:


這個就是異步傳輸需要考慮的,因為異步傳輸需要較多時間,結果返回之前,主程序還是運行的,即if(document.getElementById("spandata").innerHTML==""){
return true;
}else{
return false;
}
會繼續運行,結果返回之後,這個程序已經先運行完了,所以會出現這樣的結果
解決方法可以是,直接在裡面對返回的結果在函數裡面進行判斷,然後直接跳轉頁面,例如window.location="地址",這種方式進行跳轉

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved