2011-04-28 99 views
1

好吧,我正在嘗試使用codeigniter自動完成。我做了這個確切的方法,使用普通的HTML,JQuery和PHP工作。我試圖修改一下,使它與codeigniter一起工作,但它不工作。JQuery UI自動完成與codeigniter

jQuery的

$("#update-text").autocomplete({source:"<?php echo site_url('userProfile/autocomplete');?>",dataType:"json"}); 

在USERPROFILE控制器的功能自動完成

function autocomplete(){ 
    // this takes the text field and whatever the user writes it autocompletes it. 
    //Every single place and event in the database should be displayed in this view in this format 



    $this->load->view("source", $data); 

    } 

在PHP文件

<form method="post" action="#" name="updatePlanForm"> 
<div class="ui-widget"> 
<label for="update-text"></label> 
<input type="text" id="update-text" name="updateText" value="What are you gonna do today?" onclick="removeText()"/> 
</div> 
<input type="button" class="small green button" value="Update Plan" name="updatePlanButton"/> <!-- once clicked JQuery sends a post to a controller send_plan and jquery will return the view --> 
</form> 

和最後源PHP文件的形式

<?php 

$req = $_GET['term']; //first get the search keyword as get method 

$arrResults = array('orange', 'apple', 'bannana'); 

$array = array_filter($arrResults, 'mycallback'); 
//filter the array containing search word using call back function 

function mycallback($var) 
{ 
    global $req; 
    if(preg_match('/^'.$req.'/', $var)) 
    {  
     return $var; 
    } 
} 

$array1 = array(); 

//filter null array 
foreach($array as $arr => $val) 
{ 
     if(!empty($val)) 
     { 
       $array1[] = $val; 
     } 

} 

//echo out the json encoded array 
echo json_encode($array1); 

?> 

回答

1

你不應該在你的觀點中有這樣的邏輯。另外,從控制器加載視圖時,$ _GET []變量將不會填充任何數據。實際上$ _GET []根本不起作用,因爲在CI中默認關閉查詢字符串。你可以打開它們,但在這種情況下你不需要。

一是直接把自動提示PHP代碼到控制器,就像這樣:一個更合適的解決方案可以實現如下

function autocomplete() { 
    $req = $this->input->post('term'); 

    $arrResults = array('orange', 'apple', 'bannana'); 

    $array = array_filter($arrResults, 'mycallback'); 
    // filter the array containing search word using call back function 

    function mycallback ($var) { 
    global $req; 

    if (preg_match('/^'.$req.'/', $var)) { 
     return $var; 
    } 
    } 

    $array1 = array(); 

    // filter null array 
    foreach ($array as $arr => $val) { 
    if(!empty($val)) { 
     $array1[] = $val; 
    } 
    } 

    //echo out the json encoded array 
    echo json_encode($array1); 
} 

然後改變你的jQuery調用,而不是使用的POST GET

$('#update-text').autocomplete({source:"<?php echo site_url('userProfile/autocomplete');?>", dataType:'json', type:'POST'}); 

有更好的方法來實現搜索,但這應該讓你在正確的軌道上。如果您最終將其連接到數據庫,那麼針對'term'的簡單LIKE查詢將正常工作:)

+0

Thanx,我測試這個然後接受:) – Kay 2011-04-29 16:08:23

+0

我試過了..沒有工作。也許我應該使用get方法? – Kay 2011-05-02 12:00:24

+0

對不起,回覆晚了。什麼部分不起作用?使用螢火蟲跟蹤發佈的請求/迴應,並讓我知道發生了什麼。如果你想使用GET你必須使你的CI配置的查詢字符串,但GET和POST之間的差異不會成爲什麼導致的問題。 – 2011-05-13 01:41:34

0

我知道這是超級遲,但修復CodeIgniter的jQuery UI自動完成的簡單方法是通過修改JS文件的自動完成部分將ajax類型設置爲POST而不是GET。

只要搜索你的jQuery UI的.js文件標記爲「自動完成」的部分,這個代碼塊中,找到唯一的Ajax調用(應該只有一個)。在參數中,添加

type: "POST" 

這應該將您的自動完成更改爲使用POST而不是GET。