CI 묻고 답하기

제목 왕초보가 고수님들께 질문드립니다.
글쓴이 혀기 작성시각 2016/05/28 18:57:20
댓글 : 17 추천 : 0 스크랩 : 0 조회수 : 18364   RSS

회원가입 폼검증 view.php에서 html head부분에 자바스크립트 폼검증.js 가  있는데 

처음 페이지가 뜨고나면 폼검증.js가 잘 실행됩니다.

그런데 회원가입 서버측 폼검증후 실패하면 view.php가 재로드 되고 나면 폼검증.js를 인식하질 못하네요.

해결방법을 잘 모르겠습니다. 여기저기 다 찾아보고 비슷한 현상이 있는 분들의 해결책을 해봤는데도

초보라 그런지 해결이 안되네요. 도와주세요. 부탁드립니다.

 다음글 SQL 질문 (1)
 이전글 자동가입 방지 문자 이미지 생성관련 (3)

댓글

kaido / 2016/05/30 08:40:31 / 추천 0

폼검증 실패 시에 보여주는 페이지에서 소스보기를 해보시면 js 가 제대로 로드가 안되어 있을 것입니다.

확인해보시고, js가 제대로 로드가 안되어있다면 실패 폼 호출시에 js가 로드되도록 추가 해주시면 됩니다.

js가 로드 되어있는데 검증이 안된다면 스크립트 문제 입니다.

혀기 / 2016/05/30 14:30:26 / 추천 0

네 감사합니다. 로드되어 있는데 문제는 코드이그나이터와 제이쿼리 문제인것 같은데

해결방법을 모르겠네용. 컨트롤러에서 뷰를 로드할때 뷰파일에서 자바스크립트가 연결되어 있는데 

제이쿼리 $(document).ready(function(){}); 스크립트가 있습니다.

한번밖에 인식을 못하는 이유를 모르겠네요. ajax 때문인건지 재로드 할때는 이미 ready 상태가 끝나서 인건지

이유가 무엇이든 어떻게 해야 될지 방법을 잘 모르겠네요.무지한 저에게 깨우침을 주시면 감사하겠습니다.

한대승(불의회상) / 2016/05/30 14:57:48 / 추천 0

소스코드 일부라도 올려주세요.

지금 상태에서는 도움 드릴 방법이 없네요.

혀기 / 2016/05/30 15:22:41 / 추천 0

컨트롤러 Joincheck.php----------------------------------------------------------

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Joincheck extends CI_Controller {

     function __construct()
    {
        parent::__construct();
    }

public function index()
    {
        $this->forms();
    }

public function forms()
    {

        $this->load->library('form_validation');


        $this->form_validation->set_rules('user_id', '아이디', 'required|alpha_numeric|min_length[6]|max_length[12]');
        $this->form_validation->set_rules('user_pwd', '비밀번호', 'required|alpha_numeric|matches[user_pwdck]|min_length[6]|max_length[12]');
        $this->form_validation->set_rules('user_pwdck', '비밀번호확인', 'required|alpha_numeric');

        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('join_view');
        }
        else
        {
            $this->load->view('login_view');
        }
    }

 뷰 Join_view.php------------------------------------------------------------------------------------

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?>

<!DOCTYPE HTML>
<html lang="ko">

    <head>
        <meta charset="utf-8">

<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
        <script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
        <script type="text/javascript" src="../js/formck.js"></script>

</head>

자바스크립트 formck.js-----------------------------------

$(document).ready(function()
{

    //아이디 체크 함수     
    $("input#user_id").blur(function(){});
    });

이런구조입니다. 

혀기 / 2016/05/30 16:33:50 / 추천 0

제 생각으론 자바스크립트 문제가 아니라 콘트롤러에서 로드할때 처음에는 join_view.php를 로드하고 잘 실행되는데

폼검증이 실패하고 join_view.php를 재로드할때 문제가 발생합니다.

콘트롤러에서 뷰를 재로드할때 전체를 로드하는게 아니라 폼검증 실패부분만 로드하는것인지

아니면 재로드할때 제이쿼리 $(document).ready(function()이 인식이 되질 않는것인지 잘 모르겠습니다

코드이그나이터의 주소체계 때문에 그런것인지 해결할 방법을 몰라서 빨리 해야하는데 제자리 걸음을 하고 있습니다

고수님들 도와주세요.

한대승(불의회상) / 2016/05/30 18:13:36 / 추천 0

자바스크립트 소스코드 위치가 상대 경로로 되어 있군요.

../js/formck.js 이 부분을 /js/formck.js 로 고치거나 formck.js가 있는 절대 경로로 수정해 보세요.

혀기 / 2016/05/30 19:56:04 / 추천 0

절대경로로 수정을 해봐도 되질 않네요. 경로의 문제가 아니라 컨트롤러에서 뷰를 로드할때 처음 로드는 자바스크립이 잘 실행되는데

폼검증후 재로드 할때 스크립트가 실행이 안된다는 것은 이미 로드 되어 $(document).ready(function() 함수가 실행이 안된다는 문제에 있는것 같습니다. 문제점은 알겠으나 해결방법을 몰라 고수님들의 의견을 구하고자 합니다.

kaido / 2016/05/30 20:22:49 / 추천 0

@혀기

아무래도 무언가 놓치고 계신게 있거나, 혹은 특수한 상황이거나 인듯합니다.

 

일단 자바스크립트 파일은 호출이 되는데 작동이 안된다고 의심하고 계시다면

자바스크립트의  타이밍을 바꾸어 보세요.

ready 만 있는것은 아닙니다.

저도 비슷한 케이스를 격어서 ready가 아닌 다른 방법으로 해결본 기억이 나네요.

 

가령 간략화 스타일 들

/ / 간략화 스타일
!function () {...}();
true && function () { ... } (); 
0, function () { ... } ();
~function () { ... } ();

// 위 함수들은 논리적인 방식의 ready 를 사용하지 않고 사용되는 스타일 입니다.

 

 

아니면 ready 대신 load 사용도 해보시구요.

여기 ready 와 load의 차이를 잘 보여주는 블로그 글이 있네요.

http://ojtiger.com/179

한대승(불의회상) / 2016/05/30 23:17:43 / 추천 0

 

크롬 개발자 도구에서 살펴 보세요.

formck.js 위치에 문제가 있을거에요.

 

배강민 / 2016/05/31 12:40:05 / 추천 0
ready 안에 alert(1) 등을 찍어본다면(?) 폼 전송 전/후에 다 alert(1)이 나오나요?
혀기 / 2016/05/31 15:58:11 / 추천 0

할건 다해본것 같은데 안되네용....ㅠㅠ

kaido님 과 불의회상님 조언대로 다 해봤는데도 안되네용.... 도와주셔서 감사드립니다.

 그리고 배강민님이 말씀하신 alert 해보면 처음엔 잘 되고 폼전송후에는 alert가 안됩니다

kaido / 2016/05/31 16:24:14 / 추천 0

그럼 js 꼬인거 맞습니다. 차분하게 js가 언제 어느 타이밍으로 로드가 되는지 생각 해보셔야 합니다.

IE로 디버그 추적하면 바로 에러 내뱉을거 같네요.

혀기 / 2016/05/31 19:29:17 / 추천 0

if ($this->form_validation->run() == FALSE)
        {
            //폼 검증이 실패했을 경우 또는 일반 입력 페이지
            echo '<script>window.alert("왜안돼지?");</script>';
            $this->load->view('join_view');
        }
        else
        {
            //폼 검증이 성공했을 때 보여줄 페이지
            $this->load->view('login_view');
        }

혹시나 코드이그나이터가 문제인것 같아 에코로 뿌려봤는데 역시나 여기서 안되는게 확인되었습니다.

처음에는 왜안돼지 alert가 뜨는데 

폼검증 실패후라면 왜안돼지가 alert창에 떠야 하는데 안뜨네요.

배강민 / 2016/06/01 07:47:22 / 추천 0

허 정말 신기하네요. 

흠 그럼, <script>window.alert("왜안돼지?");</script> 이게 페이지 소스에는 있는데 실행이 안된다는 건데 요상하네요.

혀기 / 2016/06/01 09:54:05 / 추천 0

콘트롤러에서 폼검증후 검증이 실패하면 폼에러를 뷰에서 보여주는데 뷰를 로드하는게 아니라 그냥 현재뷰에 에러만 보여주는 것인건가요? 코드이그나이터도 비동기식으로 뷰를 로드하는 것인지 코드이그나이터의 처리방식을 제가 잘 몰라서 헷갈리네요

처음엔 제이쿼리 ajax 비동기방식 페이지 처리 때문인줄 알고 data-ajax=false를 했는데 그것때문이 아니었더라구요.

지금은 제가 어떻게 처리를 해줘야 할지 알아보고는 있는데 답이 보이질 않습니다.

다른분들은 아무 문제없이 잘 사용하시는것 같은데 저만 이런걸 보면 제가 초짜이긴 한가 봅니당.ㅋ ㅋ

아무것도 아닌거에 이렇게 신경써서 답변해주신 분들께 정말 감사드립니다.

열심히 해결해 보도록 할께요.. 혹시라도 해결방법을 찾으신분이 계시면 저에게 알려주시면 정말 감사하겠습니당..^^