개발 Q&A

제목 자바스크립트로 엔터키 입력시 폼을 자동 전송되게 하고 싶습니다.
글쓴이 Tier 2 작성시각 2015/06/27 16:41:50
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 13424   RSS
책보고 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
ㅠㅠ 안되네요..