[Ajax] Chap 2. Ajax実装


jQuery Ajax


jQueryは
  • のブラウザ間の問題を解決できます
  • クロスブラウザ:
  • 、異なるブラウザに同じ画面を表示させる
  • jQuery Ajaxで最も重要なAPI:"$.ajax"
  • 👨‍🎓 $.ajaxの基本構文
    jQuery.ajax( [settings ] );
    
    ex)
    $.ajax({
      속성1 :1
      속성2 :2
      속성3 :3 ...
    });
    注API:http://api.jquery.com/jquery.ajax/

    Ajax主な属性


    メソッドのタイプ(POST,GET)データサーバは、属性の未URLデータをURLタイプサーバに送信する.key/value形式のオブジェクト(json)データ型サーバから返されるデータ型(xml、json、script、html)successajax通信成功時に呼び出されるイベントハンドラerrorajax通信失敗時に呼び出されるイベントハンドラcompletejax通信無条件に呼び出されるイベントハンドラ
    注API:http://api.jquery.com/jquery.ajax/

    1.ボタンをクリックして転送値をサーバーに送信し、サーバーから出力する


    ajax.jsp

    	
    <input type="text" id="userId" placeholder="ID를 입력해보세요"><br>
    <input type="password" id="userPwd" placeholder="PW를 입력해보세요"><br>
    <button id="btn">전송</button><br>
    	
    <script>
    	$('#btn').click(function(){
    			
    		// 서버로 전송할 데이터 찾기
    		var userId=$('#userId').val();
    		var userPwd=$('#userPwd').val();
    			
    		if(userId.length==0 || userPwd.length==0){
    			alert('데이터는 무조건 입력하셔야 합니다.');
    			return;
    		}else{
    				
    			$.ajax({
    				url : "/ajax/ajax1.do",
    				data :{"userId":userId, "userPwd":userPwd},
    				type : "get",
    				success : function(){
    					//ajax 통신이 정상 처리 되었을때 불러오는 콜백 함수
    					alert('ajax 통신 성공');
    				},
    				error : function(){
    					//ajax 통신에 문제 발생하였을때 불러오는 콜백 함수
    					alert('ajax 통신 실패');
    				},
    				complete : function(){
    					//ajax 통신 성공, 실패이든 무조건 콜백되는  함수
    					alert('ajax 통신이 성공/실패이든 불려지는 함수');
    				}
    			});
    			
    		}
    			
    	});
    </script>

    Ajax1Servlet.java

    // ajax로 전달한 데이터 받기
    String userId= request.getParameter("userId");
    String userPwd= request.getParameter("userPwd");
    	
    // 데이터 출력
    System.out.println("userId : "+userId);
    System.out.println("userPwd : "+userPwd);

    2.ボタンをクリックしてサーバから送信された値を受信し、ViewPageから出力する


    Ajax2Servlet.java

    // 응답값 인코딩
    response.setCharacterEncoding("UTF-8");
    
    PrintWriter out = response.getWriter();
    
    // View Page로 출력
    out.print("까꿍[서버에서 전송한 값]");

    ajax.jsp

    <div id="print">
      // Servlet에서 받아온 데이터 출력할 공간
    	
    </div>
    <button id="btn">가져오기</button>
    	
    <script>
    	$('#btn').click(function(){
    			
    		$.ajax({
    			url : "/ajax/ajax2.do",
    			type:"post",
    			success: function(result){
      
      				// 데이터 통신 성공했다면  Servlet에서 받아온 값 div태그 안에 출력
      
    				var data = $('#print').html()+result+"<br>";
    					
    				$('#print').html(data);
    			},
    			error : function(){
    				console.log('ajax2.do 서버 호출 실패');
    			}
    		});
    	});	
    </script>

    3.ボタンをクリックして転送値をサーバーに送信し、応答値を受信して出力する


    ajax.jsp

    <style>
    #print{
    	width:300px;
    	height:400px;
    	border:1px solid red;	
    	overflow:auto;
    }
    
    </style>
    
    <input type="text" id="su1">
    <select id="yun">
    	<option value="+">+</option>
    	<option value="-">-</option>
    	<option value="*">*</option>
    	<option value="/">/</option>
    </select>
    <input type="text" id="su2">
    <button id="btn">계산</button>
    	
    <h3>연산 결과</h3>
    <div id="print">
    <!-- 데이터 출력 공간 -->
    </div>
    	
    	
    <script>
    	$('#btn').click(function(){
      		// url로 보낼 데이터 세팅
    		var su1 = $('#su1').val();
    		var yun = $('#yun').val();
    		var su2 = $('#su2').val();
    			
    		$.ajax({
    			url:"/ajax/ajax3.do",
    			type:"post",
      
      			// url로 보낼 데이터 설정
    			data:{"su1":su1, "yun":yun, "su2":su2},
    			success: function(result){
      				// url에서 처리하고 보낸 데이터 div태그 안에 출력
    				var data =$('#print').html()+result+"<br>";
    				$('#print').html(data);
    			},
    			error: function(){
    				alert('실패');
    			}
    				
    		});
    		
      		// input 태그 비우기
    		$('#su1').val("");
    		$('#su2').val("");
    			
    	});
    	
    </script>

    Ajax3Servlet.java

    // Ajax로 전달한 데이터 받기
    int su1 = Integer.parseInt(request.getParameter("su1"));
    int su2 = Integer.parseInt(request.getParameter("su2"));
    String yun = request.getParameter("yun");
    		
    String result = null;
    switch (yun) {
    case "+":
    	result = su1 + yun + su2 + "=" + (su1 + su2);
    	break;
    case "-":
    	result = su1 + yun + su2 + "=" + (su1 - su2);
    	break;
    case "*":
    	result = su1 + yun + su2 + "=" + (su1 * su2);
    	break;
    case "/":
    	result = su1 + yun + su2 + "=" + (su1 / (double) su2);
    	break;
    }
    
    // 출력
    PrintWriter out = response.getWriter();
    out.print(result);

    ex.ID入力後の重複認証処理


    idCheck.jsp

    ID : <input type="text" id="userId"><br>
    <span id="msg"></span>
    	
    <script>
    	$('#userId').blur(function(){
    	
    		var userId= $('#userId').val();
    			
    		$.ajax({
    				
    			url:"/member/memberIdCheck.do",
    			type:"get",
    			data: {"userId":userId},
    			success: function(result){
      
    				// Servlet에서는 boolean타입이 었으나 전달할때 String타입으로 전환
    				if(result=='true'){
    					$('#msg').html('사용 불가[이미 사용중입니다.]').css("color","red");
    				}else{
    					$('#msg').html('사용 가능').css("color","blue");
    				}
    			},
    			error: function(){
    				console.log('ajax 통신 실패');
    			}
    				
    		});
    			
    	});
    	
    </script>
    

    AjaxMemberIdCheckServlet.java

    // userId 값을 받아서, 비즈니스 로직 처리로 해당 ID가 중복 유무 판단
    		
    String userId = request.getParameter("userId");
    MemberService mService = new MemberServiceImpl();
    
    // 비즈니스로직( <->Service <-> DAO <-> DB) 처리후 결과값 받기
    // true : 중복O
    // false : 중복X
    boolean result = mService.selectIdCheck(userId);
    		
    PrintWriter out = response.getWriter();
    		
    out.print(result);