CI 묻고 답하기

제목 ajax와 폼검증 질문 다시 드립니다ㅜsjs
카테고리 CI 2, 3
글쓴이 소연신 작성시각 2017/02/16 14:16:18
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 13777   RSS

[controlles]

if($this->form_validation->run() == false)        {

$errors = validation_errors();            

echo json_encode($errors);            

$this->load->view('/user/join');      

 }

 

[view]

var join_id = $(".join_id").val().trim();

var retn = true;

if(retn && join_id == '')    {        

alert('아이디를 입력하세요.');        

retn = false;    }

 

$.post("/ajax/Ajax_user/join_ajax",

    {'join_id':join_id},

function(data) { }.json )};

 

<form method="post" action="/ajax/Ajax_user/join_ajax">

<input type="text" name="join_id" class="user_input check_input join_id" value="<?php echo set_value('join_id');?>" />

<input type="submit" class="ubtn ubtn_right btn_confirm" id="join_submit" value="회원가입하기">

 

 

 kaido님께서 알려주셨는데...아 그래도 안되네요.. 도저히 모르겠어서 다시 질문드립니다.

1. 회원가입 페이지는 User컨트롤러에서 로드되어있고 회원가입 페이지에서 데이터는 ajax로 ajax를 따로 처리하는 ajax_user컨트롤러로 갑니다. 가기 전에 js로 검증을 하구요. 이건 잘 됩니다. 여기에 CI 폼검증을 추가하려고 하는 입장인데..  ci폼검증 쓰기 전에는 뷰에서 form에 아무값도 주지 않았었고 input submit대신 button type button으로 사용했었습니다.

js로 검증하는 걸 막아놓고 위 소스처럼 ci폼검증을 하면 그건 잘됩니다. 근데 두 개를 합쳐서 하면 먹통이 됩니다. kaido님께서 당연히 바로 주면 안되니 컨트롤러에서 리턴값을 주라고 하셔서.. 

$errors = validation_errors();

echo json_encode($errors);

이렇게 줬습니다. 근데...아무것도 입력하지 않고 회원가입 버튼을 누르면 얼럿으로 입력하라고 뜹니다. js에 넣은것처럼. 근데 거기서 멈춰버려요. ci폼검증 에러메시지도 떠야 되는데요., 

 

2. 만약 검증 2개가 잘 됐다고 가정했을 때.. 오류 메세지를 두 번 띄우게 되는데 이런 경우 어떤 메세지를 띄우시고 어떻게 처리하시는 지 궁금합니다.

 

3. 컨트롤러에서 리턴값을 보낼 때... 리맵에 있는 헤더가 딸려 가는데..이거 어떻게 막는 방법이 있나요.. remap에 조건을 주면 되는건지...ㅜㅜ

 

 

 

 다음글 phpexcel라이브러리 pdf 파일로 변경 에러
 이전글 폼검증과 연관된 ajax 질문입니다. (6)

댓글

kaido / 2017/02/16 14:33:58 / 추천 0
if($this->input->is_ajax_request()){
			if( method_exists($this, $method) ) {
				$this->{"{$method}"}();
			}else{
				//없는 메소드 호출
			}
		}else{ //ajax가 아니면

			$this->load->view("/common/header2");
			if( method_exists($this, $method) ) $this->{"{$method}"}();
			$this->load->view("/common/footer2");
			//$this->output->enable_profiler(true);

		}

ajax 리맵처리는 이렇게 하시면 되구요.

우선 ajax로 호출하지 마시고 직접 url 주소 접근해서 테스트 해보세요.

동기화 방식으로 호출되어서 정상이면, 비동기로 호출하면 당연히 정상입니다.

 

그리고 ajax로 호출했으니 당연히 ajax로 리턴 됩니다. [핵심요소라서 굷게 씁니다!]

뷰를 호출 하신다고 자동으로 뷰가 넘어가진 않아요.

 

현재 소스를 보니 ci 폼밸리데이션과 ajax 리턴 방식 하고 혼돈하고 계신것 입니다.

소연신 / 2017/02/16 15:13:31 / 추천 0

@kaido

일단 리맵 수정해서 테스트 해봤습니다ㅜ 감사합니다. 고놈은 해결이 됐고...ajax로만 ci폼검증이..되네요? 뷰에서 from에 주소 안주고input submit이 아닌 button으로 remap테스트 해보다가.. 하는김에 이것도 해봤는데 잘 넘어온; 뭐지이거..원래 되는 건가요 이런방식으로?

 

아..이거 제가 잘못생각한거 같은데... js검증에서 얼럿이 뜨면.. 데이터가 전송이 안되니.. ajax로 나머지 ci검증은 못하는게 맞죠..음.. 그럼 뷰에서 처리해서 넘길 수 밖에 없는거네요

 

 

 

아아;;

    var retn = true;

자바스크립트 이 놈 탓이었네요.

중복으로 뜨게 만드는거 방지하려고 넣은 놈 때문에 얼럿이 한 번 뜨면 당연히 데이터 전송이 안되니 ci폼검증을 시작조차 못했죠..ㅋㅋㅋㅋ 소름돋네요 멍청함에..하

kaido / 2017/02/16 15:21:22 / 추천 0

뭐든 해결 되었으면 일단 외쳐야 합니다.

비바~ 와우~ 브라보~ 대한독립만세~ 응?

소연신 / 2017/02/16 15:24:19 / 추천 0

@kaido

그럼 정말 마지막 질문입니다!

일단 js에러 ci폼검증 에러 둘 다 띄우는데는 성공했는데.. 계속 두 번 띄울 순 없는 노릇이고.. 선택을 해야 될 거 같은데요.

 

가령 예를들어 아이디 입력의 경우.. 필수입력이고, 영어만 되고, 3~7이내 글자수..이런 조건이라면 이건  js단이나 ci폼검증에서나 둘 다 검증이 되는데 그렇지 않은 경우가 있을까요? 에러 메세지야 둘 중 아무거나 띄워도 되는데.. ci검증 하고 나서 메세지를 굳이 보여줄 필요는 없어보이구요. 아니면.. 자바스크립트가 뚫리고 서버단에서 바로 걸렸을때만 메세지를 띄우고 싶은데..그게 가능한지도요ㅜㅜ

kaido / 2017/02/16 15:40:03 / 추천 0
<script>

if(!$('#password').val()){
alert("패스워드를 입력해 주십시오.");
 return false;
}

$.post("/ajax/Ajax_user/join_ajax",

    {'join_id':join_id},

function(data) { }.json )};


</script>


​그냥 이렇게 하시면 됩니다.

return false; 는 php 에서는 exit; 같은 역할을 합니다.

 

전반적으로 소스를 복잡하게 만드시려고 노력(?) 하시는것 같아요.

반대로 소스를 슬림 하게 만드는 방법을 찾다 보시면 오히려 더 간결하게 정리가 되어서 머릿속도 같이 정리 됩니다.