Автозаполнение пользовательского интерфейса jQuery с помощью codeigniter

#php #jquery-ui #codeigniter

#php #jquery-пользовательский интерфейс #codeigniter

Вопрос:

Хорошо, я пытаюсь использовать автозаполнение с помощью codeigniter. Я использовал именно этот метод, используя обычный HTML, jQuery и php, и это сработало. Я попытался немного изменить, чтобы заставить его работать с codeigniter, но он не работает.

jQuery

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

Функция автозаполнения в контроллере пользовательского профиля

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

?>
  

Ответ №1:

На самом деле у вас не должно быть подобной логики в ваших представлениях. Кроме того, переменная $_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’ будет работать нормально 🙂

Комментарии:

1. Извините за поздний ответ. Какая часть этого не сработала? Используйте firebug для отслеживания post-запроса / ответов и дайте мне знать, что произойдет. Если вы хотите использовать GET, вам придется включить строки запроса в вашей конфигурации CI, но разница между GET и POST не будет причиной проблемы.

Ответ №2:

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

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

 type: "POST"
  

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