| 제목 | 자바스크립트로 엔터키 입력시 폼을 자동 전송되게 하고 싶습니다. | ||
|---|---|---|---|
| 글쓴이 | Tier 2 | 작성시각 | 2015/06/27 16:41:50 | 
| 
                         | 
                |||
| 
                        책보고 Ajax 연습용으로 만든 코드입니다. 엔터키를 치면 에러 메세지가 뜨는데 이걸 포스트백이라고 하는 모양이더라고요? 첫번째로 이게 왜 일어나는지가 궁금합니다. 두번째로는 이걸 막는 코드를 찾아봤는데 영 좋지가 않습니다; 작동이 안되네요 어디가 잘못된걸까요? 
	//윗줄 생략(ajax 관련 스크립트-정상작동)
	<script type="text/javascript">
	function onKeydownEnterkey(obj){
		if(event.keycode==13){
			self.focus();
			obj.click();
			return false;
		}
	}
	</script>
</head>
<body>
	<div id="main">
		<form method="post" name="ajax_test">
		<label>이름</label>
			<div>
			<input type="text" name="names" value="핰핰" onkeydown="onKeydownEnterkey(document.all.submit_btn)">
			</div>
			
			<div>
			<input type="button" id="submit_btn" onclick="server_request()" value="전송">
			</div>
		</form>
		<div id="contents"></div>
	</div>
								
</body>
</html>
                        
                     | 
                |||
| 다음글 | 보안 질문 드려요~ (1) | ||
| 이전글 | 컨트롤러 프로퍼티에 대해서 질문드립니다. (2) | ||
| 
                             
                                변종원(웅파)
                                /
                                2015/06/27 20:17:04 /
                                추천
                                0
                             
                             | 
                    
| 
                             
                                Tier 2
                                /
                                2015/06/27 20:32:37 /
                                추천
                                0
                             
                            An Error Was Encountered
 
에러메세지 내용을 안적었네요 죄송합니다 ㅠThe action you have requested is not allowed. 아 그리고 책은 잘 보고 있습니다 정말 잘 쓰인 책 같아요! 많은 도움이 됩니다  | 
                    
| 
                             
                                변종원(웅파)
                                /
                                2015/06/28 14:27:45 /
                                추천
                                0
                             
                            
                                csrf 설정을 해놨는데 csrf값을 전송하지 않아서 그렇습니다. 
                        config.php에서 csrf 설정을 끄고 작업하시던지 쿠키를 보내던지 하셔야 합니다. 책 234페이지 3번, 4번 설명항목 참고하세요.  | 
                    
| 
                             
                                Tier 2
                                /
                                2015/06/28 20:36:38 /
                                추천
                                0
                             
                            
                                위에 있는 코드가 생략되서 그런데 csrf값을 전송하도록 짰습니다. 다만 엔터키를 눌러도 전송버튼을 클릭한것처럼 진행되도록 스크립트를 만들었는데 클릭하면 정상작동하던것이 엔터를 누르면 댓글에 쓴 에러메세지가 뜹니다 
                        생략된 코드입니다. 
<!DOCTYPE html>
<html lang="">
<head>
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable = no" />
   <meta name="apple-mobile-web-app-capable" content="yes" />
   <title>CodeIgniter</title>
 <!--[if lt IE9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
 <script type="text/javascript" src="/main/includes/js/httpRequest.js"></script>
 <script type="text/javascript">
  function server_request() {
   var csrf_token = getCookie('csrf_cookie_name');
   var name = "name="+encodeURIComponent(document.ajax_test.names.value)+"&csrf_test_name="+csrf_token;
   sendRequest("ajax_action", name, callback_hello, "POST");
  }
  
  function callback_hello() {
   if (httpRequest.readyState == 4) {
    if (httpRequest.status == 200) {
     var contents = document.getElementById("contents");
     contents[removed] = httpRequest.responseText;
    }
   }
  }
  
  function getCookie(name) {
   var nameOfCookie = name + "=";
   var x = 0;
   
   while (x <= [removed].length){
    var y = (x+nameOfCookie.length);
    
    if ([removed].substring(x, y) == nameOfCookie) {
     if ( (endOfCookie = [removed].indexOf( ";", y)) == -1 )
      endOfCookie = [removed].lenght;
     return unescape ( [removed].substring( y, endOfCookie ) );
    }
    
    x= [removed].indexOf( " ", x ) + 1;
    
    if (x == 0)
     
     break;
   }
   
   return "";
  }
 </script>
//이하는 본문 코드 그대로
                             | 
                    
| 
                             
                                변종원(웅파)
                                /
                                2015/06/29 12:32:10 /
                                추천
                                0
                             
                            
                                obj.click 대신 server_request()를 호출하도록 바꿔보세요
                             
                         | 
                    
| 
                             
                                Tier 2
                                /
                                2015/06/30 01:04:42 /
                                추천
                                0
                             
                            
                                ㅠㅠ 안되네요..
                             
                         | 
                    
디버깅의 시작은 에러메시지입니다.