CI 묻고 답하기

제목 view에서 ajax호출시 생성자 중복 호출 관련 문제
카테고리 일반
글쓴이 게구리 작성시각 2017/11/02 11:40:03
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 545   RSS

안녕하세요.

 

제목대로 view에서 ajax로 컨트롤러 메소드 호출시에 생성자가 두 번 호출되는 현상인데 혹시 이게 정상적인 건가요?

 

윈도우10

php 버전 7

ci 버전 3.1.5

아파치 2.4

 

사용중입니다.

 

코드내용은 

---------------------------컨트롤러----------------------------------------------------------------

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

class test_curl extends CI_Controller{ 

public function __construct(){

    parent::__construct();

    echo "test";

    $fp = fopen("C:\\dev\\test_".mt_rand().".txt","w") or die("Unable to open file!");

    fwrite($fp,"123123");    fwrite($fp,"123123");

    fclose($fp);

  }



  public function index(){

    $data = array();

    $this->load->view('test_curl',$data);

  }



  public function test(){

  }

}

--------------------------------------------------------------------------------------------------

 

---------------------------뷰---------------------------------------------------------------------

<html>

<head></head>

<body>

<div>view입니다</div>

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script><script> 

$(document).ready(

  function () {   

    alert();

    $.post("http://localhost/ci/index.php/test_curl/test",'',function (res) {      alert();    });  });

</script>

</body>

</html>

------------------------------------------------------------------------------------------------------

 

페이지로드시 경로에 파일 하나를 생성하는데

뷰에서 ajax요청시 파일이 하나 더 생성됩니다..

그래서 위의 페이지 접근시 파일이 두개가 생성되는데요

 

이게 원래 정상적인 동작인 건가요...혹시 코드에 무슨 문제가 있을까요

태그 php,ci,ajax
 다음글 index 없애기 이후 메인->다른페이지이동시 문... (1)
 이전글 액티브 레코드 update에서 테이블과 컬럼이름에 공백... (2)

댓글

/ 2017/11/02 11:49:50 / 추천 0

우선 클레스의 개념에 대해서 아셔야 할듯 하네요.

__construct 이 함수의 경우 class 가 인스턴스화 될 때, 자동 실행 되는 함수 입니다.

이 함수가 최초 페이지 접근했을 때 __construct를 실행할것이며, 페이지 접근 후에 비동기로 다시 이 클레스에 포함된 메소드를 호출 하시는데,

이때 또 한번 __construct가 실행이 되므로, 그 안에 있는 파일을 생성하는 구문이 총 2번 실행되서 발생하는 문제 입니다.

게구리 / 2017/11/02 12:01:04 / 추천 0

아하..댓글감사드립니다

로직을 생성자에 넣지않는 방법을 고민해봐야겠네요 ㅠㅠ