2013-03-28 48 views
0

如果下面的ajax腳本不返回1,我試圖返回true整個validator.registercallback函數。但是,它不工作,我認爲它可能是一些基本的東西我錯過了,但我無法弄清楚。阿賈克斯不會讓我返回true或false

validator.registerCallback('unique_username', function(value) { 

     //use ajax to run the check 
     var xmlhttp; 
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) 
    { 
     if(xmlhttp.responseText != 1) { 
      alert('Username Exists'); 
      return false; 
     } else { 
      alert('Username Available!'); 
      return true; 
     } 
    } 
    } 
xmlhttp.open("GET","uniqueuser.php?username="+value,true); 
xmlhttp.send(); 

}) 

有什麼奇怪的是,以下的作品,它只是沒有根據的AJAX腳本的值工作:

validator.registerCallback('unique_username', function(value) { 

     //use ajax to run the check 
     var xmlhttp; 
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) 
    { 
     if(xmlhttp.responseText != 1) { 
      alert('Username Exists'); 
      return false; 
     } else { 
      alert('Username Available!'); 
      return true; 
     } 
    } 
    } 
xmlhttp.open("GET","uniqueuser.php?username="+value,true); 
xmlhttp.send(); 

return true; 

}) 

所以基本上,我可以告訴它在主返回true函數,但是當我嘗試使它返回true時,如果ajax腳本中的值不返回1,則不起作用。順便說一下,警報工作。所以它獲得了正確的價值,但它不會返回真實的或者錯誤的。

任何幫助表示讚賞!

更新

validator.registerCallback('unique_username', function(value) { 

     //use ajax to run the check 
function ajax_result() { 
    var xmlhttp; 
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) 
    { 
    } 
    } 
xmlhttp.open("GET","uniqueuser.php?username="+value,true); 
xmlhttp.send(); 
} 

if(ajax_result() != 1) { 

alert('Username Exists'); 
return false; 

} else { 

alert('Username Available!'); 
return true; 

} 

}) 
+2

搜索「AJAX返回值的」 *異步*位是特別重要的..也,考慮使用AJAX庫(沒有,我不在乎哪一個,但自*你標記爲jQuery * ..) – 2013-03-28 23:38:04

+0

http://stackoverflow.com/questions/5316697/jquery-return-data-after-ajax-call-success - jQuery,但應該顯示點(以及如何編寫更乾淨的代碼),如果你想*同步*行爲(ick!)請參閱http://stackoverflow.com/questions/2942544/synchronous-calls-with-jquery – 2013-03-28 23:40:42

+0

我試過使用jquery版本,但它沒有工作要麼 – user1751581

回答

0

您已經添加了jQuery的關鍵字列表這個問題所以我的回答是使用jQuery:

var username = "foo"; 
$.get('uniqueuser.php', {username: username}, function(webpage) 
{ 
    if (webpage == 1) 
    alert("user exists"); 
    else 
    alert("Username available!"); 
}); 
+0

'validator.registerCallback('unique_username',function(value){ var username = value; $ .get('uniqueuser。php「,{用戶名:用戶名},功能(網頁) {網頁== 1} { alert(」Username Available!「) \t返回true; } else { alert(「Username Exists」); \t return false; } }); }) } 當我這樣做時,我得到了正確的警報,但它沒有返回函數真或假 – user1751581

+0

我想在驗證程序 – user1751581

+0

內爲函數'function(value)'返回true或false啊,也許你需要把我寫的代碼放在一個帶有兩個參數的函數中,函數is_user_existing(username,continuation),continuation是一個函數對象,它將被調用ajax調用的結果。然後你使用is_user_existing('foo',function(result){/ * do someting * /});結果可能是真或假。 –

1

你所缺少的是Ajax調用是異步。當你的函數結束時,ajax調用還沒有完成,值(真或假)只會在稍後返回。

爲了解決這個問題,您需要使ajax調用同步或修改您的鏈接邏輯,例如將其顛倒並在ajax調用中運行validator.registerCallback()。你也可以考慮一些更復雜的技術,如promises

[更新]這是怎麼做的要求同步:

xmlhttp.open("GET","uniqueuser.php?username="+value,false); 

您還需要更改代碼的其餘部分,例如參見this MDN article

+0

如何讓它同步? – user1751581

+0

我查了一下,但我找不到在哪裏把async = false放在我的代碼中 – user1751581

+0

看我的更新... – Christophe

0

再次嘗試:

is_user_existing('foo', function(result) 
{ 
    if (result) 
    alert("user is existing"); 
    else 
    alert("user is not existing"); 
}); 

function is_user_existing(username, continuation) 
{ 
    $.get('uniqueuser.php', {username: username}, function(webpage) 
    { 
     continuation (webpage == 1); 
    }); 
} 
+0

is_user_existing沒有普通返回值的原因是該函數在ajax調用得到結果之前返回 –

+0

我不知道如何解決這個問題...我編輯你的答案與我試過的,並沒有工作 – user1751581

+0

我仍然試圖返回true或false到'validator.registerCallback('unique_username',函數(值)' – user1751581