2012-10-05 18 views
0

好傢伙我試着去檢查用戶名的可用性當u註冊,但我有問題,返回false,真正瞭解我必須提交jQuery的校驗用戶名能力

所以我用2個瓦爾使得它的形式 - 結果並等待,但當我等待結果頁面凍結

function checkUser(u) { 
    var wait = true,result; 
    $.ajax({ 
     url: "register.php", 
     data: "Available=" + u.val(), 
     type: "GET", 
     cache: false, 
     success: function(Answer){ 
      if(Answer == "Taken"){ 
       result = false; 
       updateTips("Потребителското име е заето!"); 
      } else{ 
       result = true; 
      } 
      wait = false; 
     } 
    }); 
    while(wait){} 
    return result; 
} 
+0

什麼是VAR等待= true時,結果;? – StaticVariable

+0

var wait = true,result;這是什麼? –

+0

@jhonraymos該行應該工作,但while循環有風險 – Huangism

回答

1

擺脫o的f醜while循環,而這種屬性添加到您的Ajax調用:

async: false 
+0

請解釋一下這是什麼 –

+0

它使ajax調用同步,這意味着它將等待任何進一步的行動,直到請求完成 – Eagle

+0

人,你是絕對可怕的......很多人試圖幫助我,你只做一個小貼子,它使最好的工作 –

2

哎呀。

你不需要把它放在while循環中。當你用AJAX請求轟炸服務器時,也會凍結客戶端上的JS。

刪除While循環並調用該函數。

function checkUser(u) { 
    $.ajax({ 
      url: "register.php", 
      data: "Available=" + u.val(), 
      type: "GET", 
      cache: false, 
      success: function(Answer){ 
       if(Answer == "Taken"){ 
        alert("USERNAME TAKEN"); 
       } 
       else{ 
        $('#myform').submit(); 
       } 

      } 


     }); 
    } 

稱呼它,

<input type="submit" onclick="checkUser(data); return false;" /> 

或者,首選的方法由黑水

<form onsubmit="checkUser(data); return false;"> 

</form> 
+0

你是什麼意思與調用函數?至少funtion?我需要循環等到我得到結果,因爲我加載頁面來檢查用戶名 –

+0

你已經在JS中添加了回調事件(成功:部分)當它返回結果時將觸發。你不必擔心那部分。 – LiamB

+0

是的,但函數必須返回true或false - 我不能返回,而im在事件 –

1

使用一個簡單的jQuery GET()功能的建議做出阿賈克斯後

function checkUser(u) { 
$.get("register.php?availabe="+u.val(),function(data){ 
    if(data=="1") 
    { // echo 1 if username is available 
     $("form").submit(); 
    } //else it would not be submited 
    }) 
} 
+0

我可以讓回報,因爲我需要它,如果我返回true它允許表單提交,否則它不允許 –

+0

@AndreyTsarev看到編輯的答案.Ajax函數不返回任何內容? – StaticVariable

1

試試這個,我希望這將工作

// assume myForm is your form element id. 
$("#myForm").submit(function(e){ 
    e.preventDefault(); 
    var formEle = $(this); 
    $.ajax({ 
    url: "register.php", 
    data: "Available=" + u.val(), 
    type: "GET", 
    cache: false, 
    success: function(Answer){ 
     if(Answer == "Taken"){ 
      updateTips("Потребителското име е заето!"); 
     } else { 
      formEle.unbind("submit").submit(); 
     } 
    } 
    }); 
}); 
+0

我加了alert();回答=='採取',當我輸入已經使用的用戶名,它不提醒任何 –

+0

Humm @AndreyTsarev你可以嘗試,看看什麼是從服務器回來。你可以發佈只刪除所有的實現裏面,只是提醒成功:function(Answer){alert(Answer); }。它會讓你看到你可能會在哪裏受傷 – PRP

+0

這裏的主要想法是e.preventDefault();會阻止您的表單在默認情況下提交。並允許執行其餘的jQuery代碼。然後在formEle.unbind(「submit」)。submit();用於提交您想要的表單。所以基本上當你做e.preventDefault();對於任何form.submit,那麼你的表單不會提交,除非你明確地從你的代碼提交該表單。 – PRP