2016-08-24 20 views
0

私はユーザが名前を入力してサーバに送信し、サーバに送信するユーザ名のテキストボックスを持っています。 somedataを返信して、ユーザー名が取られていることをクライアントに伝えるために、テキストボックスの境界線の色を緑色に変える必要がある場合は、今度はサーバーにユーザー名の値を送信できますが、 jquery ajaxを使用して送信されたデータを受け取る方法。ここサーブレットを使用してAjax投稿に返信する方法

私のコードです:

クライアント:

$(document).ready(function() { 
$('#Registeration_Username_box').on('input', function() { 
    postUsernameToServer(); 
}); 

function postUsernameToServer() { 
    var formData = { 
      'username': $('input[name=UserName]').val(), 
      }; 
      // process the form 
    $.ajax({ 
     type: 'POST', // define the type of HTTP verb we want to use (POST for our form) 
     url: '../dusernameavailable', // the url where we want to POST 
     data: formData, // our data object 
     dataType: 'json', // what type of data do we expect back from the server 
     encode: true 
    }).done(function(data) { 
     console.log(data); 
    }); 
} 
}); 

はサーブレット:で

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
PrintWriter out = response.getWriter(); 
String str = request.getReader().lines().collect(Collectors.joining(System.lineSeparator())); 
System.out.println(str); 
} 

答えて

0

あなたのアヤックスにsuccesserrorを追加

function postUsernameToServer() { 
var formData = { 
    'username': $('input[name=UserName]').val(), 
}; 
// process the form 
$.ajax({ 
    type: 'POST', // define the type of HTTP verb we want to use (POST for our form) 
    url: '../dusernameavailable', // the url where we want to POST 
    data: formData, // our data object 
    dataType: 'json', // what type of data do we expect back from the server 
    encode: true, 
    success: function(data) { 
    //TODO make the box green or whatever your requirement is 
    }, 
    error: function() { 
    //TODO username already taken 
    } 
}); 
} 
}); 

サーブレットは適切な応答を送信します。 サーバーからのエラーと見なすには、ajaxに対して200以外の応答コードを送信する必要があります。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String str = request.getReader().lines().collect(Collectors.joining(System.lineSeparator())); 
    System.out.println(str); 
    //TODO - check if user name exists or not 
    if(user name already exists){ 
     response.setProperty(response.HTTP_STATUS_CODE, "500"); 
     PrintWriter out = response.getWriter(); 
     out.println("error"); 
     out.close(); 
    } 
    else{ 
     PrintWriter out = response.getWriter(); 
     out.println("success"); 
     out.close(); 
    } 

}}

+0

それはHTTP_STATUS_CODEは解決できないと言うか、フィールドエラー – jacky

+0

'HttpServletResponse.SC_FORBIDDEN'または任意の他のコードを試してみてくださいではありません。ここをクリックしてください - https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpServletResponse.html –

+0

私は成功しました。今度はサーバーにテキスト値を送信しません。 – jacky

0

は、あなたのAJAX呼び出しに成功ハンドラを追加します。

次のようなものを試すことができます。 'green'と 'red'はCSSファイルで定義したCSSクラスです。

$.ajax({ 
      type: 'POST', // define the type of HTTP verb we want to use (POST for our form) 
      url: '../dusernameavailable', // the url where we want to POST 
      data: formData, // our data object 
      dataType: 'json', // what type of data do we expect back from the server 
      encode: true, 
      success: function(response) { 
       if(response.isUserNameAvailable == true) 
        $('input[name=UserName]').addClass('green'); 
       else 
        $('input[name=UserName]').addClass('red'); 
      } 
     }).done(function(data) { 
      console.log(data); 
     }); 
+0

成功を追加しています:関数、私のajaxは、今もデータを送信しませんどのようにそうです – jacky

+0

あなたはサーバー側のコンテンツタイプを設定する必要があるかもしれませんresponse.setContentType("アプリケーション/ json ")。 – Arun

+0

if(response.isUserNameAvailable == true)を持つ場所にクロムにブレークポイントを設定し、応答を受け取っているかどうかを確認します。 – Arun

関連する問題