0

SO でこれに関連するいくつかの質問があることは知っていますが、私の特定の問題に答えるものはありません。

このチュートリアルでオートコンプリート入力を機能させようとしています

ページはエラーなしで正しく読み込まれますが、文字を挿入すると開発者コンソールにエラーが表示されます: GET http://localhost/autocomplete/getResult/ 500 (Internal Server Error)

エラーの原因はjquery-1.9.1.min.js:5.

GET が機能するように変更する必要がある Codeigniter の設定はありますか、それともコードに構文の問題がありますか:

コントローラ

    <?php

class Autocomplete extends CI_Controller
{
    function __construct() {
        parent::__construct();
        $this->load->model('autocomplete_model'); 
    }

    function index()
    {
        $this->load->view('autocomplete');
    }

    function getResult($title)
    {
        var $result = $this->autocomplete_model->a_method('customerName',$title);
        echo json_encode($result);

    }
}

意見

<html>
   <head>
      <title>
         test
      </title>
      <link href="<?php echo base_url() ?>application/css/ui-lightness/jquery-ui-1.8.custom.css" media="screen" type="text/stylesheet" rel="stylesheet">
   </head>
<body>

   <form>

      <label for="search">Search</label>
      <input type="text" id="search">
      <input type="hidden" value="<?php base_url() ?>" id="hiddenurl">
      <input type="submit" value="Search">

   </form>
<?php echo  base_url(); ?>
   <script src="<?php echo base_url() ?>application/scripts/jquery-1.9.1.min.js" type="text/javascript"></script>
   <script src="<?php echo base_url() ?>application/scripts/jquery-ui-1.10.1.custom.min.js" type="text/javascript"></script>
   <script src="<?php echo base_url() ?>application/scripts/autocomplete.js" type="text/javascript"></script> 





</body>

</html>

Autocomplete.js

$(document).ready(function(){
    $('#search').keypress(function(e){
        if(e.which == 13)
            {
                e.preventDefault();
            }

        var searched=$('#search').val()
        var fullurl= $('#hiddenurl').val() + 'autocomplete/getResult/' + searched
        $.getJSON(fullurl,function(result){

            var elements = [];
            $.each(result,function(i,val){
                elements.push(val.title)
            })
            $('#search').autocomplete({
                source:elements
            })
        })
    })
})

チュートリアルでは と を使用jquery-1.6.2.min.jsjquery-ui-1.8.16.custom.min.jsます。

と を使用jquery-1.9.1.min.jsしてjquery-ui-1.10.1.custom.min.jsいます。これらはjqueryの新しいバージョンであるため、これは問題にはならないと思います。

私の構成ファイルには、CSRFに関連する次の設定があります。

$config['csrf_protection'] = FALSE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;

どんなアドバイスでも大歓迎です。確かにそれは簡単なものです。

アップデート

@undefined からの支援に従って、コードに次の変更を加えました。

コントローラ

    <?php

class Autocomplete extends CI_Controller
{
    function __construct() {
        parent::__construct();
        $this->load->model('autocomplete_model'); 
    }

    function index()
    {
        $this->load->view('autocomplete');
    }

    function getResult($title)
    {
        var $result = $this->autocomplete_model->a_method('customerName',$title);
        echo json_encode($result);

    }
}

モデル

<?php
class autocomplete_model extends CI_Model
{
    function __construct()
    {
        parent::__construct();
    }

    function a_method() {
        $query = $this->db->like('CustomerName',$title);
        $query = $this->db->get('customers');
    return $query->result();

    }
}

表示 - 変更なし

<html>
   <head>
      <title>
         test
      </title>
      <link href="<?php echo base_url() ?>application/css/ui-lightness/jquery-ui-1.8.custom.css" media="screen" type="text/stylesheet" rel="stylesheet">
   </head>
<body>
   <form>
      <label for="search">Search</label>
      <input type="text" id="search">
      <input type="hidden" value="<?php base_url() ?>" id="hiddenurl">
      <input type="submit" value="Search">
   </form>
<?php echo  base_url(); ?>
   <script src="<?php echo base_url() ?>application/scripts/jquery-1.9.1.min.js" type="text/javascript"></script>
   <script src="<?php echo base_url() ?>application/scripts/jquery-ui-1.10.1.custom.min.js" type="text/javascript"></script>
   <script src="<?php echo base_url() ?>application/scripts/autocomplete.js" type="text/javascript"></script> 
</body>
</html>

autocomplete.js - 変更なし

$(document).ready(function(){
    $('#search').keypress(function(e){
        if(e.which == 13)
            {
                e.preventDefault();
            }

        var searched=$('#search').val()
        var fullurl= $('#hiddenurl').val() + 'autocomplete/getResult/' + searched
        $.getJSON(fullurl,function(result){

            var elements = [];
            $.each(result,function(i,val){
                elements.push(val.title)
            })
            $('#search').autocomplete({
                source:elements
            })
        })
    })
})

私は今これをひどく間違っていると思いますが、私はかなりの学習曲線にあるのでアドバイスをいただければ幸いです:-)

4

1 に答える 1

1

そのため、上記をあきらめ、代わりにはるかに単純な jquery オートコンプリートを使用しました。

コントローラ: [sales.php]

class Sales extends MY_Controller{

      function index(){
        $this->load->view('sales/new_order_details');
      } 

      function get_customers(){
        $this->load->model('Sales_model');
        if (isset($_GET['term'])){
          $q = strtolower($_GET['term']);
          $this->Sales_model->get_customer($q);
        }
      }
}

モデル: [sales_model.php]

<?php
// (Array of Strings)
class Sales_model extends MY_Model{

  function get_customer($q){
    $this->db->select('CustomerName');
    $this->db->like('CustomerName', $q);
    $query = $this->db->get('Customers');
    if($query->num_rows > 0){
      foreach ($query->result_array() as $row){
        $row_set[] = htmlentities(stripslashes($row['CustomerName'])); //build an array
      }
      echo json_encode($row_set); //format the array into json data
    }
  }
}

意見:

<html>
   <head> 
      <link href="<?php echo base_url() ?>application/css/ui-lightness/jquery-ui-1.8.custom.css" media="screen" type="text/stylesheet" rel="stylesheet">
      <script src="<?php echo base_url() ?>application/scripts/jquery-1.9.1.min.js" type="text/javascript"></script>
      <script src="<?php echo base_url() ?>application/scripts/jquery-ui-1.10.1.custom.min.js" type="text/javascript"></script>
      <script src="<?php echo base_url() ?>application/scripts/autocomplete.js" type="text/javascript"></script> 
   </head>
<body>
   <form>
      <label for="customer">Customer</label>
      <input type="text" id="customer" />
   </form> 
</body>
</html>

最後に、autocomplete.js:

$(function(){
  $("#customer").autocomplete({
    source: "sales/get_customers"
  });
});

明らかにjqueryファイルが必要です。http://jqueryui.com/で見つけることができます。カスタム ビルドで、オートコンプリート ウィジェットが含まれています。

完璧かつ簡単に機能します。乾杯。

于 2013-03-13T10:19:09.833 に答える