2013-02-05 128 views
0

有我的代碼:呼叫從JSON特定控制器笨

var formObject = { 
    run : function(obj) { 
     if (obj.val() === '') { 
      obj.nextAll('.update').html('<option value="">----</option>').attr('disabled', true); 
     } 
     else 
     { 
      var id = obj.attr('id'); 
      var v = obj.val(); 
      jQuery.getJSON('update.php', { id : id, value : v }, function(data) { 
       if (!data.error) { 
        obj.next('.update').html(data.list).removeAttr('disabled'); 
       } else 
       { 
        obj.nextAll('.update').html('<option value="">----</option>').attr('disabled', true); 
       } 
      }); 
     } 
    } 
}; 
$(function() { 
    $('.update').on("change", function() { 
     formObject.run($(this)); 
    }); 
}); 

我需要調用特定的控制器,以自動填充選擇形式。 在這行代碼我打電話的網址:

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

我可以叫笨視圖,而不是這個「update.php」文件,或我必須做的其他方式?謝謝。

+2

在CodeIgniter中,您的URL是您的控制器。在進行AJAX調用時,您將以與在瀏覽器中相同的方式訪問URL。你需要製作一個加載你的視圖的控制器。 –

+0

要添加,請確保控制器只接收帶有$ this-> input-> is_ajax_request的ajax請求,或者如果不加載視圖,而不是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