Codeigniter - Ajax(jQuery) Json Post 전송 처리 - PHP & Codeigniter



1. CI에서 post 방식으로 받아들일때

[jQuery 소스]

 

jData = {"id" : "test", "test" : "22"}

$.ajax({

type:"POST",  

url :url,

data:{data : JSON.stringify(jData)}, // data를 json 형식으로 파싱하여 전달,

//CI에서는 "data" 이름으로 값 받아옴

              // contentType: "application/json; charset=utf-8",//보낼 데이터 방식

              //CI에서 POST방식으로 할 경우에는 이것을 체크하면 안된다.

              //왜냐하면, json 방식은 body 안으로 전송되므로 body 를 통해 읽어들여야 한다. 그러므로 

              //이방식으로 체크 되면 URLencoded format이 아닌 post로 받아올 수 없다.

              dataType : "json",//받을 데이터방식

              success:function(args){

 

                      },   

                      error:function(e){  

                      } 

                    });  

                  }

 

 

[CI(PHP)]

 

$this->output->set_content_type('application/json');

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

 

$json = $this->input->post("data"); // jQuery 에서 데이터를 "data"라는 이름으로 전달했으므로, 

$json = stripslashes($json); // 값 필터링

print_r($json); //(A)

$json = json_decode($json); // json데이터 디코딩

//$json = json_decode($json,TRUE); 

//두번째 파라미터에 TRUE로 주변 배열로 값을 리턴, 없으면 객체로 리턴

print_r($json); //(B)

 

echo $json->id; //두번째 파라미터 없이 값 리턴할 경우

//echo $json["id"]; // 두번째 파라미터를 TRUE로 설정했을 경우.

 

 

2. post가 아닌 raw data 방식(contentType : json )으로 받아올때. 

 

[jQuery]

$.ajax({      

                      type:"POST",  // 지정 안하면 GET으로 넘어간다.(디펄트).

                      url:"<?=MAIN_PATH?>/common/fileDelete",      

                      data: JSON.stringify(jData), //CI에서 post로 받지 않을 것이므로... 특정 네임 설정 필요없다.

//위에서 처럼 data 이후 파싱 하면, 객체로 한번 더 접근 처리 해줘야 한다.

                     contentType: "application/json; charset=utf-8",//보낼 데이터 방식

                     

                     dataType : "json",//받을 데이터방식

                      success:function(args){   

                        

                      },   

                      error:function(e){  

                          

                      } 

                    });  

 

 

[CI]

 

$this->output->set_content_type('application/json');

$json = file_get_contents("php://input");

//post 가 아닌 raw단 으로부터 값을 받아오기 위한 방식.

// php://input is a read-only stream that allows you to read raw data from the request body. 라고 설명되어있음.

$json = stripslashes($json);

$json = json_decode($json);

echo $json->id;






AD_1