2015-01-15 105 views
2

我有一個問題,當我試圖創建一個基於組合框使用codeigniter的動態值自動完成, 我已經嘗試使用Ajax並沒有成功。動態自動完成基於類別

這裏是在類調用的項目我的Ajax代碼

<script type="text/javascript"> 
$(document).ready(function() { 
    $("#jenis").change(function(){    
     $.ajax({ 
      type : "POST", 
      url: "<?php echo base_url(); ?>whz/admin/get_item", 
      dataType: "html", 
      data : "item=" + $("#jenis").val(), 
      success: function(data) 
      { 
       $("#showitem").text(data); 
      } 
     }); 
    }); 
}); 
</script> 

這是我的自動完成的jQuery代碼

<div id="showitem"> 
    <script> 
    $(function() { 
     var availableTags = [ 
     <?php foreach ($item as $row){ 
       echo '"'.$row->item_name.'",';}?> 
     ]; 
     $("#autotags").autocomplete({ 
     source: availableTags 
     }); 
    }); 
    </script> 
</div> 

,這裏是我的控制器

public function get_item() 
    { 
     $this->load->model('whz_model'); 
     $category = $this->input->post('item'); 
     $item=$this->whz_model->get_item_by_cat($category); 
     $script = ' 
      $(function() { 
      var availableTags = ['; 
      foreach ($item as $row) 
      { 
       $script .= '"'.$row->item_name.'",'; 
      } 

     $script .= ']; 
      $("#autotags").autocomplete({ 
       source: availableTags 
      }); 
      });'; 

     echo $script; 
    } 

我使用考慮JSON作爲另一種選擇,但我仍然沒有足夠的使用經驗。

遺憾的英語不好, 感謝您的幫助

+0

你會得到什麼錯誤? – goseo

+0

你的意思是說,當你輸入一些值時,它不會得到任何ajax響應? –

+0

@reza我沒有得到任何錯誤,我發送到視圖的代碼不工作,它只是顯示代碼,我試圖使用'$(「#showitem」)。html(data);'但沒有任何反應。 –

回答

0

這對於僅基於文檔,因爲我沒有任何系統方便,我可以試試。

您告訴jQuery您的AJAX響應是"html"這意味着您加載的JavaScript永遠不會被執行,我相信。可能的話,如果您將數據加載爲"script",那麼它會起作用,但更好的方法確實是使用JSON。然後

你的AJAX調用是這樣的:

<script type="text/javascript"> 
$(document).ready(function() { 
    $("#jenis").change(function(){    
     $.ajax({ 
      type : "POST", 
      url: "<?php echo base_url(); ?>whz/admin/get_item", 
      dataType: "json", 
      data : "item=" + $("#jenis").val(), 
      success: function(data) 
      { 
       availableTags = data; 
      } 
     }); 
    }); 
}); 
</script> 

有了這樣的控制器:

public function get_item() 
{ 
    $this->load->model('whz_model'); 
    $category = $this->input->post('item'); 
    $item=$this->whz_model->get_item_by_cat($category); 

    $this->output 
     ->set_content_type('application/json') 
     ->set_output(json_encode($item))); 
} 

你將不得不暴露變量availableTags全球範圍內爲這個工作,你可以實現通過更改您的DOM到

<div id="showitem"> 
    <script> 
    $(function() { 
     availableTags = [ 
     <?php foreach ($item as $row){ 
       echo '"'.$row->item_name.'",';}?> 
     ]; 
     $("#autotags").autocomplete({ 
     source: availableTags 
     }); 
    }); 
    </script> 
</div> 

您可能還會喜歡t將其公開爲window.availableTags,這樣您就可以在瀏覽器的控制檯中檢查它的值。

正如在開始時提到的,我沒有測試這個,但我相信它應該可以工作。

+0

我已經試過你的代碼,但仍然不工作,自動完成腳本仍然顯示我第一次加載頁面時設置的默認項目 –

+0

您是否嘗試過使用 window.availableTags = availableTags 來暴露該變量,並在AJAX調用之後檢查其值? 此外,AJAX調用是否獲得您期望的JSON? (只需在瀏覽器的開發人員工具中觀看請求) – jsfan