PHP/CI AJAX2019. 1. 22. 16:45

CodeIgniter에서 AJAX 사용하기


사원번호를 클릭할 때마다 jQuery를 이용한 AJAX 요청이 CodeIgniter에 전달되면 콘트롤러와 모델, 뷰 컴포넌트를 거쳐 사원정보를 JSON 포맷으로 응답한다

응답을 수신한 success 함수는 JSON 오브젝트를 사용하여 각 데이터가 표시될 위치에 출력하는 예이다


실행환경

웹서버 상의 CodeIgniter 루트에 css, js  등의 리소스 폴더를 생성하고 css 폴더에는 스타일시트 파일을 저장하고 js 폴더에는 jQuery.min.js  등의 자바스크립트 파일을 복사해둔다


emp 테이블

 - empno INT                # 사번

 - ename VARCHAR(20)   # 이름

 - dname VARCHAR(20)   # 부서

 - sal INT                      # 급여

 - pic VARCHAR(20)        # 사진파일명



웹서버의 폴더 구조

- www : 웹서버 루트 폴더

   - ciBoard 폴더 : CodeIgniter 구성파일 저장

      - css : css 파일 저장

      - js : jQuery 파일 저장

      -application/controllers/Emp.php

      -application/models/EmpModel.php

      -application/views/emp.html, emp_json.php



콘트롤러 생성

ciBoard/application/controllers/Emp.php  (요청 url : http://localhost/ciBoard/emp )

<?php  

 defined('BASEPATH') OR exit('No direct script access allowed');


 class Emp extends CI_Controller 

 {  

    public function __construct() {

         parent::__construct();

         $this->load->helper('url');

    }

    

    public function index() {

        $this->load->view("emp.html");  

    }


    function getInfo($num) {

        $this->load->model('EmpModel');

        $data = $this->EmpModel->getInfo($num);

        $row = array('row'=>($data->row_array()));

        $this->load->view('emp_json', $row);

    }

 }



모델 클래스 생성

ciBoard/application/models/EmpModel.php

<?php  

 defined('BASEPATH') OR exit('No direct script access allowed');

 

 class EmpModel extends CI_Model

 {

     public function __construct() {

         parent::__construct();

     }

     

     public function getInfo($num)

     {

         $sql = "SELECT * FROM emp WHERE empno=$num ";

         $result = $this->db->query( $sql );

         return $result;

     }

 }


뷰 파일

ciBoard/application/views/emp.html (요청 url : http://localhost/ciBoard/emp )

<!DOCTYPE html>

<html>

    <head>

        <title>사원정보 페이지</title>

        <meta charset="UTF-8">

        <meta name="viewport" content="width=device-width, initial-scale=1.0">

        <script src="js/jquery-3.3.1.min.js"></script>

        <script>

            $(function(){

              alert('jQuery Ready!');

            });

            function requestEmpInfo(num) {

                $.ajax({

                    url : '<?php echo base_url();?>emp/getinfo/'+num,

                    method: 'post',

                    data: { 'num' : num},

                    dataType : 'json',

                    success : function(res) {

                        //alert(res.ename);

                        $('#ename').html(res.ename);

                        $('#empno').html(res.empno);

                        $('#dname').html(res.dname);

                        $('#sal').html(res.sal);

                        $('#pic').html('<img src=\'images/'+res.pic+'\'>');

                    },

                    error: function(xhr, status, error){

                        console.log(xhr.status + ', '+xhr.responseText +', '+status+', '+error);

                        alert(status);

                    }

                });

            }

        </script>

        <style>

            img { width: 200px; height:200px; }

        </style>

    </head>

    <body>

        <h3>사원정보</h3>

        <div>이름 : <span id="ename"></span></div>

        <div>번호 : <span id="empno"></span></div>

        <div>부서 : <span id="dname"></span></div>

        <div>급여 : <span id="sal"></span></div>

        <div>사진 : <span id="pic"></span></div>

        <div>

            [<a href="javascript:requestEmpInfo(11);">11</a>]

            [<a href="javascript:requestEmpInfo(12);">12</a>]

            [<a href="javascript:requestEmpInfo(13);">13</a>]

            [<a href="javascript:requestEmpInfo(14);">14</a>]

            [<a href="javascript:requestEmpInfo(15);">15</a>]

        </div>

    </body>

</html>




JSON 문자열을 웹브라우저에 출력하는 뷰 콤포넌트

ciBoard/application/views/emp_json.php

<?php

echo json_encode($row);


Posted by cwisky