1

Codeigniter と jquery で髪をかきむしる。

現在、これをトラブルシューティングするための非常に基本的なコード セットがあります。

現在、私のインデックス関数は私のビューを呼び出しています。ビューは、このシナリオで jquery オートコンプリートを完全に処理します。

index を indextest または他の名前に変更すると、オートコンプリートが機能しなくなります。jquery の出力が、ページのデフォルトのメソッドである index.php に明確に渡されているようです。

メソッドを返すか表示する必要があることを指定する方法はありますか?

私のコントローラーは:

<?Php

class Sales extends MY_Controller{

  function __construct() {
    //call parent constructor
    parent::__construct();
    $this->load->model('sales_model');
  }

  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);
    }
  }

  function login() {
    redirect('/pointer/login');
  }

  function logout() {
    redirect('/pointer/logout');
  }
}

私のモデル

<?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>
      <title>
         Capture New Order
      </title>

      <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>
   <div  data-role="page"  data-theme="a">
      <div class="wrap-header">
         <div data-role="header" data-mini="true"  data-ajax="false">
            <a data-icon="grid" data-mini="true"  data-theme="a" onclick="window.location.href='/pointer'">Menu</a>
            <h3>New Order Details</h3>
         </div>
      </div>   
   <div data-role="content">
   <form>
      <label for="customer">Customer</label>
      <input type="text" id="customer" />
   </form>
   </div>

</body>
</html>

autocomplete.js

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

前述のように、コントローラーの index() メソッドを indextest() に変更し、そのメソッドを直接参照すると、オートコンプリートが機能しなくなります。

簡単なことを見逃しているのでしょうか、それともうまくいかないもっと大きな理由がありますか?

いつも助けてくれてありがとう、

UPDATE AS PER FABIO オートコンプリート スクリプトの呼び出しに関する Google Chrome 開発者からの出力

通常の index() 動作) ここに画像の説明を入力

インデックステキスト() ここに画像の説明を入力

4

2 に答える 2

3

これについて

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

これを行う

$(function(){
  $("#customer").autocomplete({
    source: "<?=site_url('sales/get_customers')?>"
  });
});
于 2013-03-13T10:19:07.743 に答える
1

indexコントローラー内のメソッドSalesは、2 番目の uri パラメーターが存在しない場合、デフォルトで呼び出されます。実際には、自分自身で応答しています。

URLsales/indextestを調整する必要がある URL を使用してビューをロードするようになったため、2 番目のパラメーターを指定せずにオートコンプリートをロードするときに機能する相対 URL です。解決策として、ソースに完全な URL を追加することができます例sourcesales/get_customersindextestsoruce:"<?=base_url();?>sales/indextest"

次のように json を出力することもできます。

$this->output->set_content_type('application/json')->set_output(json_encode($data));

の代わりに:

json_encode($row_set);
于 2013-03-13T10:16:35.840 に答える