2010-05-25 57 views
1

我不明白爲什麼我沒有得到消息作爲「用戶名已經退出」,如果輸入已經在數據庫中的用戶名。在jQuery中的變量問題

如果服務器中的用戶名稱,那麼它將返回值爲「1」,否則爲空,並且儘管成功從服務器獲取基於用戶名的值是否存在,並將值賦給變量「x 「,當我傳遞已存在的用戶名時,我無法獲得消息。我可否知道?

$(document).ready(pageInit); 
function pageInit() { 
$('#1').bind('blur',go); 
} 
function go() { 
var value = $('#1').val(); 
var x = 0; 
$.post('just.do',{username:value},function(data){ 
    x = data; 

    } 
); 

if(x) { 
     $('#para').show(); 
     $('#para').html("Username already exits"); 
     return false; 
    } 
else { 
    $('#para').hide(); 
     return true; 
    } 
}; 

編輯:這是我在做什麼在POST請求在servlet中:

String user1 = request.getParameter("username"); 
    if(user != null) { 
     String query = "Select * from users where user_name="+"\""+user+"\""; 
     b = db.doExecuteQuery(stmt,query); 
     if(b) { 
      out.write("1"); 
     } 

}

+0

你應該發佈你的服務器端代碼 – 2010-05-25 12:25:14

回答

4

您的代碼if(x) ...執行HTTP請求完成之前,作爲結果當達到部分代碼時,將永遠不會設置x

你想用回調:

$.post('just.do',{username:value},function(data) { 
    receivedResult(data); 
}); 

... 

function receivedResult(x) { 
    if(x) { 
    ... 
    } else { 
    ... 
    } 
} 
+0

感謝您的回答。 – Alvin 2010-05-25 12:44:11

2

您需要重新安排你的go()功能了一下,像這樣:

function go() { 
    $.post('just.do',{username: $('#1').val()},function(data){ 
    if(data) { 
     $('#para').show(); 
     $('#para').html("Username already exits"); 
     return false; 
    } else { 
     $('#para').hide(); 
     return true; 
    } 
    }); 
} 

$.post()是一個異步操作,使x=data在之後發生你的if(x)跑......你需要重新安排一點,以便它在響應回來後發生,例如從上面的回調內部運行或觸發。