CI 묻고 답하기

제목 ajax질문이요~
글쓴이 앙마 작성시각 2013/06/13 10:57:36
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 15103   RSS
정렬 기능을 넣기 위해 아작스를 사용하려 합니다...

기본에 아작스를 하나 사용한 것은 분명히 잘 됐는데 이번에 사용하는 것은 안되네요...

이상한 것은 그냥 location.href로 url주소에 변수를 넣어 보냈을 경우 컨트롤러와 지정된 view화면에서 데이터를

제대로 출력합니다 그런데 ajax로 보냈을 경우에는 아무런 반응이 없더군요...

컨트롤러에 변수가 제대로 갔는지 확인하고 싶지만 제가 알고 있는 방법으로는 알 수 있는 방법이 없어서 조언을 구합니다 

view(전송화면)

                                //location.href="/c_note/note/sort/"+sort_test;
    $.ajax({
     type : "POST",
     url : "/c_note/note/sort",
     data : {"sort_type" : sort_test},
     dataType : "json",
     success : function(data){
      var sort_list = "";
      var rgst = "";
      
      $.each(data,function(i, v){
       sort_list += v.QUES_SJ;
       
      });

      $("#box").html(sort_list);
      }

    });


컨트롤러

                //$sort_type = urldecode($this->uri->segment(4,0));
  $sort_type = $this->input->post("sort_type", true);
  $note_id = $this->session->userdata('select_note_id');
  $mber_id = $this->session->userdata('sess_user_id');
  $cul = '';
  $type = '';
  $order = '';
  if($sort_type == 'a'){
   $cul = 'SLTN_REQUST_TP';
   $type = 'Y';
  }else if($sort_type == 'b'){
   $cul = 'QUES_TP';
   $type = 'P';
  }else if($sort_type == 'c'){
   $cul = 'QUES_TP';
   $type = 'Q';
  }else if($sort_type == 'd'){
   $order = 'RGST_DT';
  }else if($sort_type == 'e'){
   $order = 'QUES_SJ';
  }else if($sort_type == 'f'){
   $order = 'RGST_ID';
  }else if($sort_type == 'g'){
   $order = 'DFFLY';
  }
  
  $data['q_sort'] = $this->note_model->sort_ques($cul, $type, $order, $mber_id, $note_id);
  $data['sort_count'] = $this->note_model->sort_count($cul, $type, $order, $mber_id, $note_id);
  $this->load->view('v_note/sort_list', $data);


view(출력화면)
[
<?php
 if($q_sort != null){
  for($i = 0; $i < $sort_count-1; $i++) {
?>
   {
    "num" : "<?=$q_sort[$i]->num?>",
       "QUES_SJ" : "<?=$q_sort[$i]->QUES_SJ?>",
       "RGST_ID" : "<?=$q_sort[$i]->RGST_ID?>",
       "QUES_TP" : "<?=$q_sort[$i]->QUES_TP?>",
       "RGST_DT" : "<?=$q_sort[$i]->RGST_DT?>",
       "OTHBC_YN" : "<?=$q_sort[$i]->OTHBC_YN?>",
       "QUES_ID" : "<?=$q_sort[$i]->QUES_ID?>",
       "DFFLY" : "<?=$q_sort[$i]->DFFLY?>"
   },
<?php
  }
?>
   {
    "num" : "<?=$q_sort[$i]->num?>",
       "QUES_SJ" : "<?=$q_sort[$i]->QUES_SJ?>",
       "RGST_ID" : "<?=$q_sort[$i]->RGST_ID?>",
       "QUES_TP" : "<?=$q_sort[$i]->QUES_TP?>",
       "RGST_DT" : "<?=$q_sort[$i]->RGST_DT?>",
       "OTHBC_YN" : "<?=$q_sort[$i]->OTHBC_YN?>",
       "QUES_ID" : "<?=$q_sort[$i]->QUES_ID?>",
       "DFFLY" : "<?=$q_sort[$i]->DFFLY?>"
   }
<?php
 }
?>

]


중간에 걸려있는 주석은 location.href 성공용입니다.. 분명 location은 출력용 view화면에

[{"변수명" : "변수값"}] <-- 이런 형태로 출력이 됐고, {}뒤에는 콤마가 제대로 붙었습니다.

마지막 {}에는 콤마는 붙지 않았고요.

혹시 아작스는 한 페이지에 하나만 사용이 가능한건가요? 현재 사용하는 아작스 말고도 다른 아작스가 있기는한데..

url이나 시작하는 위치가 다르기에 전혀 상관없을 것 같은데 해답이 나오지 않다보니 그런 생각밖에 들지 않네요

 다음글 Disallowed Key Characters. 에러 ... (2)
 이전글 대용량 파일 다운로드 질문. (4)

댓글

변종원(웅파) / 2013/06/13 13:53:31 / 추천 0
전에도 썼던 것 같은데 파이어폭스 - 파이어버그 설치해서 Net 탭 보세요.
ajax 요청, 응답, 헤더 등등 볼 수 있습니다.

아래 이미지는 포럼에서 지금처럼 댓글 달때의 응답내용입니다.


앙마 / 2013/06/13 17:02:08 / 추천 0
 웅파//

감사합니다ㅠ_ㅠ 변수 이동하는 것이 다 보이네요

그런데 저렇게 배열로 여러개를 한 번에 받을 때에는 잘 되는데

하나의 메세지를 받을 때는 계속 undefined가 뜨네요ㅠㅠ

$.ajax({
                    type: "POST",
                    url: "/c_note/note/id_search",
                    data : {"new_id" : user_id},
                    dataType : "json",
                    success : function(data, msg){
                        alert(data.message);
                        
                    },error: function(data) {
                        alert('에러 발생'); 
                    }
                    
                });





/////////////////////////////////////////////////


if($result_id != null){
?>
  { "message" : true }
<?php
 }elseif($result_id == null){
?>

  { "message" : false }
<?php
 }
?>

웅파님이 알려주신 방식대로 해보니 모양은 나옵니다 [{"message" : "true"}]거나 false가 나오는데요

값을 찍어주지는 못하네요

그래서 each를 사용해서도 해봤는데 안되서....ㅠ_ㅠ data.message, msg.message 등등 다 찍어봐도

나오지가 않네요..


인스카 / 2013/06/13 17:57:53 / 추천 0
 
http://cikorea.net/include/syntaxhighlighter/styles/wrapping.png) !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-size: 1em !important; display: block !important; text-indent: -1.5em !important; background-position: 0px 1.1em !important; background-repeat: no-repeat no-repeat !important;">error: function(data) {
10.http://cikorea.net/include/syntaxhighlighter/styles/wrapping.png) !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-size: 1em !important; display: block !important; text-indent: -1.5em !important; background-position: 0px 1.1em !important; background-repeat: no-repeat no-repeat !important;">alert('에러 발생');
11.http://cikorea.net/include/syntaxhighlighter/styles/wrapping.png) !important; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 1.1em !important; font-size: 1em !important; display: block !important; text-indent: -1.5em !important; background-position: 0px 1.1em !important; background-repeat: no-repeat no-repeat !important;">}

alert('에러발생');


이라고만 하지 말고..
console.log(data)



를 해서 찍어보세요. Chrome이나 Firefox의 Console에서 확인 가능합니다.

변종원(웅파) / 2013/06/13 18:06:52 / 추천 0
undefined가 나오는건 php에서 만든 형식과 jquery에서 불러오는 형식이 달라서 그런겁니다.

데이터 있다 없다 이렇게 반환하지 말고 전문형태를 다음과 같이 만들면 체크하기 편합니다.

$arr = array('code'=>'success', 'data'=>배열형태);
echo json_encode($arr);

뷰에서는 code값이 성공인지 실패인지에 따라 처리.