2011-07-31 7 views
1

で作業していない....jQueryのUIオートコンプリートは、私は、データベースから値を自動補完するために私のビューにフィールドを取得しようとしているが、間違っている何が起こっているかを把握することができないようCodeIgniterの

私にはビュー、私は次のスクリプトがあります:私は「提案」機能を持っている私のcontentmanagementコントローラ内

$(document).ready(function() { 
    $(function() { 
     $("#searchQuestion").autocomplete({ 
      source: function(request, response) { 
       $.ajax({ url: "<?php echo site_url('contentmanagement/suggestions'); ?>", 
       data: { term: $("#searchQuestion").val()}, 
       dataType: "json", 
       type: "POST", 
       success: function(data){ 
        response(data); 
       } 
      }); 
     }, 
     minLength: 2 
     }); 
    }); 
}); 

を:

function suggestions() { 
$this->load->model('onlinehelp'); 
$term = $this->input->post('term', TRUE); 

if (strlen($term) < 2) 
    break; 

$rows = $this->onlinehelp->GetAutocomplete($term); 

$keywords = array(); 
foreach ($rows as $row) 
    array_push($keywords, $row->question); 

echo json_encode($keywords);} 

そして最後に、私のモデルの中で、私は次の機能を持っている -

function GetAutocomplete($term) { 
     $this->db->select('question'); 
     $this->db->like('question',$term, 'both'); 
     $query = $this->db->get('question'); 
     return $query->result(); 
    } 

上記のクエリは、「質問のWHERE質問LIKE%$ term%からのSELECT質問」と同等です。

誰にでも私がこれで間違っているのを見ることができますか?

+1

またはものは何でも使用している開発者向けツール、 JSONレスポンスはサーバーから戻ってくるように見えますか? –

+0

一見するとあなたはうまく見えます。いくつかのデバッグ文を追加し、Firebugのようなものを使ってリクエストを調べる必要があると思います。 – Sukumar

+0

コードがモデルgetAutocompleteまで到達し、そこで失敗するようです - 私が得るエラーメッセージは "非オブジェクト上のメンバ関数を呼び出し"です$ term変数が得られているので問題が何も表示されませんうまくいった? –

答えて

0

CSRF保護が有効になっているため、内部サーバエラー500が発生している可能性があります。その場合、POSTリクエストにはすべてCSRF値が含まれている必要があります。

1.

$this->input->cookie('your_csrf_name');

2.ではなくPOSTGET要求を実行使用してデータ内CSRF値を含める:あなたはいくつかのオプションがあります。

コントローラーに$this->input->get('term', TRUE);を使用してください。値をサニタイズして検証することを忘れないでください。

CSRF保護を無効にします。お勧めしません。

0

これは、CSRFで動作が有効になって:

はあなたのオートコンプリートのものに続いてjqueryのクッキープラグイン

を使用します。

Firebugので
<script type="text/javascript"> 
$(document).ready(function() { 

$(function() { 
    $("#searchQuestion").autocomplete({ 
     source: function(request, response) { 
      $.ajax({ url: "<?php echo site_url('contentmanagement/suggestions'); ?>", 
       data: { term: $("#searchQuestion").val(), ci_csrf_token: $.cookie("ci_csrf_token") }, 
       dataType: "json", 
       type: "POST", 
       success: function(data){ 
        response(data); 
       } 
      }); 
     }, 
     minLength: 2, 
     focus: function(event, ui) { 
      $("#searchQuestion").val(ui.item.term); 
      return false; 
     } 
    }) 
    .data("autocomplete")._renderItem = function(ul, item) { 
      return $("<li></li>") 
        .data("item.autocomplete", item) 
        .append("<a>" + item.term + "</a>") 
        .appendTo(ul); 
    }; 
    }); 
});</script> 
関連する問題