2012-12-12 52 views
2

這是我的代碼。檢查表單上是否存在用戶名提交

的.js

$(document).ready(function() { 

    $("#username").focusout(function() { 

     $.ajax({ 
      type:'post', 
      url:site_url()+'/client/checkUserName', 
      data:{'username':$("#username").val()}, 
      dataType:'json', 
      success:function(result){ 
       if(result != 'false'){ 
        $('#message').text('Username exists'); 
       } 

      } 
     }); 
    }); 

的.html

<form id='form1' method="post"> 
     <input type="text" name="username" id="username"/> 
     <span id="message" style="color:red"></span> 
     <input type="submit" value="submit" id="regis" class="btn"/> 
</form> 

及其對事件的內容工作的罰款。 如果用戶名存在,如何使表單不提交?

假設有形式的隱藏字段說

<input type="text" hidden id="type" value="<?php echo $type;?>"> 

然後如果隱藏字段,然後,如果已經存在與否的用戶名neednot檢查存在的價值。

回答

0

你可以簡單地禁用提交按鈕

$(document).ready(function() { 

$("#username").focusout(function() { 

    $.ajax({ 
     type:'post', 
     url:site_url()+'/client/checkUserName', 
     data:{'username':$("#username").val()}, 
     dataType:'json', 
     success:function(result){ 
      if(result != 'false'){ 
       $('#message').text('Username exists'); 
       $('#regis').attr('disabled','disabled'); 
      } else { 
       $('#regis').removeAttr('disabled'); 
      } 
     } 
    }); 
}); 
+0

我不確定。你能保證在任何干預事件(如表單提交)之前處理異步ajax響應嗎? –

+0

我們可以在頁面加載時默認禁用它。但當然我們需要額外的服務器檢查提交。 –

+0

我不確定這會起作用。用戶可以輸入一些不太可能的用戶名(即垃圾郵件)。聚焦時,腳本會檢查名稱並批准它,取消提交時的禁用。用戶然後可以編輯名稱,並立即按提交。有可能得到像這樣的工作,但有太多邊緣案例,它似乎非常脆弱。 –

0

如果您只檢查用戶名是否存在於JavaScript中,那麼您的網站將不安全。黑客無需實際點擊按鈕或執行客戶端代碼即可完成提交。

所以這意味着當提交已經發生時,您需要檢查服務器端是否存在用戶名。在這種情況下,javascript檢查沒有多少好處。

你也不想爲黑客提供一種方法來檢查哪些用戶名存在,哪些不存在。如果您在提交後檢查,黑客不知道用戶名是否無效,或者密碼錯誤。

編輯:到目前爲止@КонстантинРекунов提供了唯一的JavaScript可能工作。但是,請參閱我的評論,他的答案是關於解決方案的脆弱性。任何像這樣的解決方案都將固有地脆弱。

這樣做的唯一合理原因是在註冊過程中建議替代方案。即使那樣做也是不好的做法。我建議你改變你的預期設計。

+1

不發送一個Ajax請求的PHP腳本在服務器端的檢查? – sbeliv01

+0

是的,我明白,但我需要檢查用戶名存在沒有頁面提交。 – Developer

+0

@ sbeliv01它與檢查行爲發生的地方有關。拒絕登錄的服務器端操作與拒絕登錄的客戶端操作不同。支票本身只是預期行動的一半。 –

0

你可能需要把你的js代碼的功能,並添加:return false;到如果校驗失敗再加入onsubmit = "[functionName]";

0

你應該添加回假像,並在那裏你調用函數

if(result != 'false'){ 
        $('#message').text('Username exists'); 
        return true; 
        } 
        else 
        { 
         return false; 
        }