2012-11-06 68 views
1

PHP,返回一個JSON編碼數組引導2.2.1事先鍵入的內容

$this->load->model('car_model', 'cars'); 
$result = $this->cars->searchBrand($this->input->post('query')); 
$this->output->set_status_header(200); 
$this->output->set_header('Content-type: application/json'); 
$output = array(); 
foreach($result as $r) 
    $output['options'][$r->brandID] = $r->brandName; 
print json_encode($output); 

輸出:{"options":{"9":"Audi","10":"Austin","11":"Austin Healey"}}

JS更新:

$(".searchcarBrands").typeahead({ 
    source: function(query, typeahead) { 
     $.ajax({ 
      url: site_url + '/cars/search_brand/'+query, 
      success: function(data) { 
       typeahead.process(data); 
      }, 
      dataType: "json" 
     }); 
    }, 
    onselect: function(item) { 
     $("#someID").val(item.id); 
    } 
}); 

UPDATE:未捕獲的類型錯誤:對象函數(){返回a.apply(c,e.concat(k.call(arguments)))}沒有方法'process'

如果我鍵入j '''然後鍵入前面只顯示每個結果的首字母(一串A字母)。如果我輸入第二個字母,我什麼都看不到了。

我試過JSON.parse關於數據或使用data.options但沒有運氣。

我在做什麼錯?

+0

你基本上是試圖轉換預輸入,允許遠程數據資源? – Darrrrrren

+0

'process'功能? –

+0

@Darrrrrren,是 – stef

回答

0

$ .post是異步的,所以你不能在其中返回。這不會返回任何東西。

2

這是我做的,以促進與引導的預輸入遠程數據源:

$("#search").typeahead({ 

    source: function(typeahead, query) { 

     $.ajax({ 

      url: "<?php echo base_url();?>customers/search/"+query, 
      success: function(data) { 

       typeahead.process(data); 
      }, 
      dataType: "json" 
     }); 
    }, 
    onselect: function(item) { 

     $("#someID").val(item.id); 
    } 
}); 

然後你只需要確保你的JSON編碼的數組包含value指數爲標籤和id場設置您的隱藏ID後,如此:

$this->load->model('car_model', 'cars'); 
$brands = $this->cars->searchBrand($this->uri->segment(4)); 
$output = array(); 
foreach($brands->result() as $r) { 

    $item['value'] = $r->brandName; 
    $item['id'] = $r->brandID; 
    $output[] = $item; 
} 
echo json_encode($output); 
exit; 
+0

這給了我「Object a has no method'process'」指typeahead.process – stef

+0

不應該說'Object typeahead沒有方法'process'嗎?不是,「對象」?你可以在原始文章中發佈你的更新代碼嗎? – Darrrrrren

+0

我跟着你,但沒有說這是'a'是我在文本字段中輸入的內容。更新了我原來的帖子。 – stef

3

我一直在與Bootstrap 2.2.1的最後一天作戰。不管我做了什麼,它都行不通。對我來說,除非我在進程函數中放置一個斷點(可能只是因爲FireBug已經打開?),否則我總是得到未定義錯誤的進程。

不管怎樣,作爲一個補丁我重新下載引導與預輸入省略,得到了這裏的預輸入: https://gist.github.com/2712048

而且使用此代碼:

$(document).ready(function() { 
    $('input[name=artist]').typeahead({ 
     'source': function (typeahead) { 
      return $.get('/7d/search-artist.php', { 'artist': typeahead.query }, function (data) { 
       return typeahead.process(data); 
      }); 
     }, 
     'items': 3, 
     'minLength': 3 
    },'json') 
}); 

我的服務器返回此(爲「博'):

["Bo","Bo Burnham","Bo Diddley","Bo Bruce","Bo Carter", 
"Eddie Bo","Bo Bice","Bo Kaspers Orkester","Bo Saris","Bo Ningen"] 

當然,現在它忽略了我的minLength,但它會讓我度過一天。希望這可以幫助。

編輯:找到這裏的解決方案: Bootstrap 2.2 Typeahead Issue

使用附帶引導2.2.1預輸入,代碼應爲:

 

    $(document).ready(function() { 
     $('input[name=artist]').typeahead({ 
      'source': function (query,typeahead) { 
       return $.get('/search-artist.php', { 'artist': encodeURIComponent(query) }, function (data) { 
        return typeahead(data); 
       }); 
      }, 
      'items': 3, 
      'minLength': 3 
     },'json') 
    }); 

相關問題