2012-04-03 34 views
0

我對我的onkeyup事件有一個ajax調用,它檢查給定的電子郵件地址是否在數據庫中。我的問題是,我找不到一個正確的解決方案來檢查ajax響應是否爲空,如果是,我需要禁用一個按鈕。檢查innerHTML是否爲空

這是ajax.php輸出:

$sql = "// the query"; 

$result = mysql_query($sql); 
$num_rows = mysql_num_rows($result); 

if($num_rows>0){ 
    echo "<i>Yepp, this is taken</i>"; 
    } 

這是JavaScript的Ajax調用按鈕禁用和啓用功能(Ajax調用只有在電子郵件地址是有效的):

function checkEmail(str){ 

    email = document.getElementById('user-email').value 
    AtPos = email.indexOf("@") 
    StopPos = email.lastIndexOf(".") 

    if (AtPos == -1 || StopPos == -1) { 
     document.getElementById('button-reg').disabled=true;  
    }else{ 
     if (str=="") 
      { 
      document.getElementById("txtHint").innerHTML=""; 
      return; 
      } 
     if (window.XMLHttpRequest) 
      {// code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp=new XMLHttpRequest(); 
      } 
     else 
      {// code for IE6, IE5 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
     xmlhttp.onreadystatechange=function() 
      { 
      if (xmlhttp.readyState==4 && xmlhttp.status == 200){ 
       document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
      } 
      } 
     xmlhttp.open("GET","ajax.php?q="+str,true); 
     xmlhttp.send(); 
    } 
    var htmlstring = document.getElementById("txtHint").innerHTML; 

    htmlstring = htmlstring.replace(/^\s+/,''); 

    if(htmlstring==""){ 
     document.getElementById('button-reg').disabled=false; 
    }else{ 
     document.getElementById('button-reg').disabled=true; 
    } 
} 

正如你可以看到我試着用空格elemination,但沒有運氣...空repsonse後按鈕依然沒有禁用...

有人可以幫助我在這裏? :) 非常感謝!

+0

做你嘗試添加 「返回」 後,如果(AtPos == -1 || StopPos == -1)?目前,每次調用函數時都會調用函數的最後11行。 – 2012-04-03 13:41:01

回答

2

使用此功能..

function checkEmail(str){ 

    email = document.getElementById('user-email').value 
    AtPos = email.indexOf("@") 
    StopPos = email.lastIndexOf(".") 

    if (AtPos == -1 || StopPos == -1) { 
     document.getElementById('button-reg').disabled=true;  
    }else{ 
     if (str=="") 
      { 
      document.getElementById("txtHint").innerHTML=""; 
      return; 
      } 
     if (window.XMLHttpRequest) 
      {// code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp=new XMLHttpRequest(); 
      } 
     else 
      {// code for IE6, IE5 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
     xmlhttp.onreadystatechange=function() 
      { 
      if (xmlhttp.readyState==4 && xmlhttp.status == 200){ 
       document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 

       htmlstring = xmlhttp.responseText.replace(/^\s+/,''); 
       if(htmlstring==""){ 
        document.getElementById('button-reg').disabled=false; 
       }else{ 
        document.getElementById('button-reg').disabled=true; 
       } 
      } 
      } 
     xmlhttp.open("GET","ajax.php?q="+str,true); 
     xmlhttp.send(); 
    } 
} 

希望這有助於..

+0

我被替換,但仍然不工作...... :(「document.getElementById('button-reg')。disabled = false;」JS沒有執行...... – VORiAND 2012-04-03 14:07:19

+0

與「htmlstring = xmlhttp.responseText;」仍然沒有。 .. – VORiAND 2012-04-03 14:14:29

+0

@voriand - 見我編輯的答案。 – 2012-04-03 14:19:07

1

也許這:

var isEmpty = (xmlhttp.responseText + "").length==0; 

也許你可以寫你的程序更加有趣。

$out = array("ok"=>true,"msg"=>"Not data found","html"=>"<h1>Not <i>data</i> found</h1>"); 
echo json_encode($out); 

然後在客戶機上,加載JSON數據,以及怎麼做,如果(數據[「確定」])...這樣你可以從服務器傳遞多個參數給客戶端,並有這些參數分開。讓客戶端部分可以輕鬆選擇使用什麼部分,並且正確編碼所有內容,這樣您就不會遇到與utf-8有關的問題。如果你有一些json擴展,像Firebug這樣的檢查器會很好地呈現這些參數。