繁体   English   中英

如何异步接收来自后端的消息?

[英]How to receive messages from backend asynchronously?

我需要验证用户名,因此当用户输入用户名时,应将其发送到后端以验证其可用性。 我有以下代码但怀疑从后端接收可用或不可用的消息。

   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>
   ....

Server End Psuedo Code(实际实现:Java)

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

我将给出一个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/

如果我正确理解问题,那就是“从服务器端返回正确的响应”。 实际的实现被称为Java,所以我假设有一个Ajax请求提交的后端Servlet。 您需要在doGet方法中获取HttpServletResponse对象的句柄(当您使用get时),添加您的逻辑以验证用户名并发送响应文本。 就像是

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();
}

使用下面的这个函数...你也会注意到,请求将有一个readystate和类似的东西,你在200-202之间寻找prolly statusCode,4的ready状态,以及OK的statusText

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或ruby标签并创建if语句,而不是使用javascript来添加和删除类,或者切换隐藏和显示取决于每个步骤发生的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM