2013-02-05 1 views
0
에서 JSON에서 특정 컨트롤러

내 코드가있다. 내가 URL을 호출하고이 코드 줄에서 :전화 CodeIgniter의

jQuery.getJSON('update.php', { id : id, value : v }, function(data) 

나는 그것이 가능한 대신 'update.php'파일 CodeIgniter의보기를 전화, 또는 내가 다른 방법으로 그것을해야 하는가? 감사.

+2

CodeIgniter에서 URL은 컨트롤러입니다. AJAX 호출을 할 때 브라우저에서와 동일한 방식으로 URL을 이동합니다. 보기를로드하는 컨트롤러를 만들어야합니다. –

+0

추가하려면 컨트롤러가 $ this-> input-> is_ajax_request를 사용하여 아약스 요청 만 수신하는지 확인하거나 json 파일 대신보기를로드하면 $ this-> output – Philip

+0

으로 브라우저에 파일을 출력하면됩니다. 일반적으로 CI보기 JSON 데이터가 아니므로 JSON을 컨트롤러/모델에서 직접 반환하는 것이 좋습니다. – jtheman

답변

0
class Controller{  
    public function mymethod(){  
     //make sure its an ajax request 
     if(!$this->input->is_ajax_request()) 
     { 
      show_error('Invalid Request'); 
      return; 
     }   
     if(!$this->input->post('id') OR !$this->input->post('val')) 
     { 
      echo(json_encode(array(
       'error' : 1 
      ))); 
      return; 
     } 
     $query_from_db = ''; //mysql query ?    
     if($query_from_db) 
     { 
      //send to browser, no view 
      return $this->output 
         ->set_content_type('application/json') 
         ->set_output(json_encode($query_from_db)); 
     }   
    } 
} 

/** 
* Put this global var in your main view 
* So its avail to all your files 
**/ 
var SITE = "<?=site_url()?>"; 

/** Somefile.js **/ 
;(function($){ 

    var formObject = { 
     init : function(){ 
      if($("#formID")) this.run();//only load if a form with specific id exists 
     }, 
     run : function(){ 
      //limited nested functions 
      //only execution 
      var update = function(obj){ 
       //check for empty value 
       if(obj.val() == '') 
       { 
        obj.nextAll('.update').html('<option value="">----</option>').attr('disabled', true); 
        return; 
       } 

       var data = { 
        id : obj.attr('id'), 
        val : obj.val() 
       }; 

       return doAjax(data); //doAjax function execution 
      }; 

      var doAjax = function(data){ 
       return $.getJSON(SITE + "controller/mymethod", data, function(callback){ 
        if(callback.error) 
        { 
         obj.nextAll('.update').html('<option value="">----</option>').attr('disabled', true); 
         return; 
        } 

        obj.next('.update').html(callback.list).removeAttr('disabled'); 

       }); 
      }; 

      $('.update').on("change", function() { 
       update($(this));//update function execution 
      }); 
     } 
    }    
    $(function(){ 
     formObject.init(); 
    }); 
})(jQuery); 
+0

감사합니다. @Philip 도움이됩니다. – Miki