2013-06-28 37 views
0

我需要驗證用戶名,所以當用戶輸入用戶名時,它應該發送到後端以驗證其可用性。我有以下代碼,但有疑問從後端接收可用或不可用的消息。如何異步接收來自後端的消息?

function verifyUsername(value){ 
      if(window.XMLHttpRequest) 
      { 
       xmlhttp = new XMLHttpRequest(); 
      } 
      else 
      { 
       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
      xmlhttp.onreadystatechange=function() 
      { 
       if(xmlhttp.readyState == 4 && xmlhttp.status == 200) 
       { 
        document.getElementById("mymessage").innerHTML=xmlhttp.responseText; 
       } 
      } 
      xmlhttp.open("get","verifyUsername?username="+value,false); 
      xmlhttp.send(); 
     } 


    .... 
    <div id="mymessage"></div> 
    .... 

服務器端的僞碼(實際執行:JAVA)

.... 
if(verify(username)) 
    return "Username is not available"; 
else 
    return "username is available"; 

回答

1

我給的這個jQuery的例子,我不會用純JavaScript版本打擾。你正在尋找的是一個回調函數,在ajax請求返回時觸發。

// listen to a click event on a button OR something 
$("#buttonName").on("click", function(event){ 

    // prevent any default activity 
    event.preventDefault(); 

    // get your value 
    var value = $("#mymessage").val(); 

    // jQuery ajax event 
    $.ajax({ 
     url : "verifyUsername?username="+value, 
     type: 'GET' 
    }).done(function (data) { 
     if (console && console.log) { 
     console.log("Data returned :"+data) 
     // do something else 
    } 
    }): 

.done()是成功回調選項,還有其他人也:

// jQuery ajax event 
     $.ajax({ 
      url : "verifyUsername?username="+value, 
      type: 'GET' 
     }) 
    // successful callback 
    .done(function(){ // success }) 
    // fail/error callback 
    .fail(function(){ // fail }) 
    // completed callback 
    .always(function(){ // will always execute, even if request fails }) 
}); 

參考:http://api.jquery.com/jQuery.ajax/

+0

謝謝,但如何將它關聯到onclick?所以一旦用戶鍵入數據並點擊文本框觸發此功能? – J888

+1

這有幾種方法。你聽一個事件,點擊,keydown等我會更新我的答案,以反映這一點 –

1

如果我理解正確的問題,那就是,「回國來自服務器端的正確響應「。 實際的實現被稱爲Java,所以我假設有一個Ajax請求提交到的後端Servlet。 您需要獲取doGet方法中的HttpServletResponse對象的句柄(正如您使用的那樣),添加您的邏輯以驗證用戶名並將響應文本發回。 喜歡的東西

public void doGet(HttpServletRequest request,HttpServletResponse response) 
    throws ServletException, IOException 
{ 
    String username = request.getParameter(username); 
    String responseText = ""; 
    boolean isUserAval; 
    //add your logic to verify username setting isUserAval to true/false accordingly 

    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 
    if(isUserAval) 
    { 
     responseText = "Username is available"; 
    } 
    else 
    { 
     responseText = "Username is not available"; 
    } 
    out.println(responseText); 
    out.close(); 
} 
0

使用下面這個函數...您還會注意到,請求將有4 readyState的和類似的東西,你的200-202之間尋找prolly的StatusCode,並準備狀態,的OK

var request = $.get(url, function(event){ 
    //If your within your application your url can be the method you need 
    //I.E. Ruby URL post would be /api/v1/users/find_user_by_ID 
    //This URL Points to the api/v1 folder than the users controller 
    //Than finally the method inside the controller (find_user_by_ID) 
} 

一個狀態文本我也相信,無論你做的,並不需要在JavaScript中,如果你使用PHP或Ruby,你可以簡單地添加PHP或紅寶石標記,如果語句創建,不是使用javascript添加和刪除類,或切換隱藏和顯示取決於每個步驟中發生的事情。

相關問題