JQuery UI автозаполнение с помощью codeigniter - PullRequest
1 голос
/ 28 апреля 2011

ОК, я пытаюсь использовать автозаполнение с помощью codeigniter. Я сделал этот точный метод, используя обычный HTML, JQuery и PHP, и это сработало. Я попытался немного изменить его, чтобы он работал с codeigniter, но он не работает.

JQuery

$("#update-text").autocomplete({source:"<?php echo site_url('userProfile/autocomplete');?>",dataType:"json"});

Функция автозаполнения в контроллере userProfile

function autocomplete(){
    // this takes the text field and whatever the user writes it autocompletes it.
    //Every single place and event in the database should be displayed in this view in this format



    $this->load->view("source", $data);

    }

Форма в php файле

<form method="post" action="#" name="updatePlanForm">
<div class="ui-widget">
<label for="update-text"></label>
<input type="text" id="update-text" name="updateText" value="What are you gonna do today?" onclick="removeText()"/>
</div>
<input type="button" class="small green button" value="Update Plan" name="updatePlanButton"/> <!-- once clicked JQuery sends a post to a controller send_plan and jquery will return the view -->
</form>

и, наконец, исходный файл php

<?php

$req = $_GET['term']; //first get the search keyword as get method

$arrResults = array('orange', 'apple', 'bannana');

$array = array_filter($arrResults, 'mycallback');
//filter the array containing search word using call back function

function mycallback($var)
{
    global $req;
    if(preg_match('/^'.$req.'/', $var))
    {       
        return $var;
    }
}

$array1 = array();

//filter null array
foreach($array as $arr => $val)
{
        if(!empty($val))
        {
                $array1[] = $val;
        }

}

//echo out the json encoded array
echo json_encode($array1);

?>

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

У вас не должно быть такой логики в ваших взглядах.Кроме того, переменная $ _GET [] не будет заполняться какими-либо данными, когда вы загружаете представление из контроллера.На самом деле $ _GET [] не будет работать вообще, так как строки запросов по умолчанию отключены в CI.Вы можете включить их, но вам не нужно в этом случае.Более подходящее решение могло бы быть реализовано следующим образом:

Сначала поместите самосовершенствующийся php-код непосредственно в контроллер, например так:

function autocomplete () {
  $req = $this->input->post('term');

  $arrResults = array('orange', 'apple', 'bannana');

  $array = array_filter($arrResults, 'mycallback');
  // filter the array containing search word using call back function

  function mycallback ($var) {
    global $req;

    if (preg_match('/^'.$req.'/', $var)) {
      return $var;
    }
  }

  $array1 = array();

  // filter null array
  foreach ($array as $arr => $val) {
    if(!empty($val)) {
      $array1[] = $val;
    }
  }

  //echo out the json encoded array
  echo json_encode($array1);
}

Затем измените вызов jQuery на использование POST вместоGET

$('#update-text').autocomplete({source:"<?php echo site_url('userProfile/autocomplete');?>", dataType:'json', type:'POST'});

Существуют более эффективные способы поиска, но это должно привести вас на правильный путь.Если вы в конечном итоге подключите это к базе данных, простой запрос LIKE против 'term' будет работать нормально:)

0 голосов
/ 19 января 2012

Я знаю, что это слишком поздно, но простой способ исправить автозаполнение пользовательского интерфейса jQuery для CodeIgniter - изменить часть автозаполнения файла JS, чтобы установить тип ajax POST вместо GET.

Просто поискдля раздела с пометкой «автозаполнение» в вашем файле jjuery UI .js и в этом блоке кода найдите единственный вызов ajax (должен быть только один).В параметрах добавьте

type: "POST"

. Это должно изменить ваше автозаполнение, чтобы использовать POST, а не GET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...