2011-03-18 5 views
3

ビューコードである:(符号付き)CodeIgniterの+ jQueryのUIのオートコンプリート= 500内部サーバーエラー

<html> 
<head> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> 

     <!-- Load JQuery UI --> 
     <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script> 
<script type="text/javascript"> 
    $(function() {  

     $("#input").autocomplete({ 
      source: function(req, add){ 
       $.ajax({ 
        url: '<?php echo base_url(); ?>test/ac2', 
        dataType: 'json', 
        type: 'POST', 
        //data: req, 
        data: 'input='+req, 
        success: function(data){ 
         if(data.response =='true'){ 
          add(data.message); 
         } 
        } 
       }); 
     }, 
     minLength: 2, 
     select: function(event, ui){ 
      $(this).end().val(ui.item.value); 
      } 
     }); 

    });  
</script> 
</head> 
<?php 

echo form_open(); 
echo form_input('input', '', 'id="input"'); 
echo form_close(); 

?> 
</html> 

とコントローラコード:

class Test extends CI_Controller { 

    function index() 
    { 
     $this->load->view('vw/test_vw'); 
    } 

    public function ac2() 
    { 

     //$search = $this->input->post('term'); 
       $search = $this->input->post('input'); 

     $data['response'] = 'false'; 

     $this->db->select('*'); 
     $this->db->from('loc_exercise'); 
     $this->db->like('locations', $search); 
     $locations = $this->db->get()->result(); 


     if (count($locations) > 0) { 
      $data['message'] = array(); 

      foreach ($locations as $location) { 
       $data['message'][] = array( 'label' => $location->locations, 
       'item' => $location->locations, 
       'value' => $location->locations); 
      } 

      $data['response'] = 'true'; 
     } 
     echo json_encode($data); 
    } 

Iは入力には何も入力しますボックス私は、コンソール上でこれを取得する:

POST http://my.example.com/test/ac2 500 (Internal Server Error) 

とCIエラーには(log_thresholdは1、/ logsです何の問題もないように思わログに記録しますchmod 777)。

私はconfig.phpにquery_strings TRUEとallow_get_array TRUEを設定しています。

この問題を解決する方法はありますか?あなたの質問で

答えて

4

を呼び出す前に、あなたは結果を持っているかどうかを確認するために非常に優れている

もう一つ。しようと、

this in the CI forumsを参照して、このblog post

+0

あなたはそれを釘付けにしました - CSRFをオフにしたら、オートコンプリートのドロップダウンが正常に機能しました。私はCSRFを使うつもりです...まだCIフォーラムで提供されているソリューションを消化していません:P - とにかくおかげで! – pepe

+0

上記の@coolgeekによって投稿されたブログ記事は素晴らしく、この問題を解決する方法をうまく説明しています – pepe

+0

うれしい – coolgeek

2

何もあなたが

$search = $this->input->post('term'); 

その後、最初の引数

としてあなたの関数に $searchを追加し、この行をこの

コメントを試してみてください上のquery_stringsまたはallow_get_array

をオンにする必要があることを示唆していません

public function ac2($search) 

は、それからちょうど私達があなたのURLが

変更して、コントローラをバックに良いです知っていることを今、ブラウザ

http://yourdomain.com/index.php/test/ac2/<insert your search string here>

でURLをヒットしてみてください。

はこれを試して...

data: 'term='+req, //<-- change to this 
+0

はい! JSONデータをブラウザーに戻してくれますが、以前の設定に戻っても、コンソールで500を取得しています。これを期待どおりに動作させるにはどうすればいいですか?入力)? – pepe

+0

FWIW - 前の設定(私の元のコード)に戻り、 'http:// yourdomain.com/index.php/test/ac2 /'に移動すると、データベース – pepe

+0

のすべての結果を含むJSONデータがありがとう私はOPからコードを更新しました - これはフォーム入力の名前なのでポストキーとして 'input'を使用していることがわかります - あなたのJSの提案を追加しましたが、まだ動作していないので、私は理由を理解できません! – pepe

0

は、AJAXなしでPHPコードをチェックしてください。あなたのエラーは、あなたのPHPがエラーの原因であることを示唆しています。あなたがこれはほぼ確実にCSRFトークンの問題である->result()

1

を使用すると、POSTデータでsendig CSRFトークンが欠落しているようだ:

$("#input").autocomplete({ 
     source: function(req, add){ 

    var cct = $("input[name=ci_csrf_token]").val(); // <--- 

      $.ajax({ 
       url: '<?php echo base_url(); ?>test/ac2', 
       dataType: 'json', 
       type: 'POST', 
       //data: req, 
       data: 'input='+req, 
    'ci_csrf_token': cct, // <--- 
       success: function(data){ 
        if(data.response =='true'){ 
         add(data.message); 
        } 
       } 
      }); 
    }, 
    minLength: 2, 
    select: function(event, ui){ 
     $(this).end().val(ui.item.value); 
     } 
    }); 

}); 

あなたはまたのようなトークンを見つけることができます:

 csrf_test_name:$("input[name=csrf_test_name]").val(), 

をそのトークンは、フォームヘルパーを使用して開いたときにビュー内に生成されます。

<?php echo form_open();?> 

ソース:* http://codeigniter.com/forums/viewthread/176318/ **自分の頭痛

関連する問題