Получить входное значение с помощью серверного скрипта для autocomplete ()

Когда я пытаюсь реализовать автозаполнение с помощью кода ниже:

$('#keyword').autocomplete({
source : '/Dev/pages/search.php',
minLength : 3,
type : 'POST',
select: function( event, ui )
{
$(this).data("autocomplete").menu.element.addClass("yellow");
}
})
.data( "ui-autocomplete" )._renderItem = function( ul, item )
{
console.log(item);
return $( "<li>" )
.append( "<a>" + add3Dots(item.name,20) + "</a>" )
.appendTo( ul );
};

if (isset($_POST["term"])){

$term = trim($_GET['term']);

$parts = explode(' ', $term);
$p = count($parts);

$a_json = array();
$a_json_row = array();

$search = connexion::bdd_test();
$requete = "SELECT name from BDD_TEST.companies";

for($i = 0; $i < $p; $i++) {
$requete .= ' WHERE name LIKE ' . "'%" . $conn->real_escape_string($parts[$i]) . "%'";
}

$result = $search->query($requete);
while($donnees = $result->fetch(PDO::FETCH_ASSOC)) {
$a_json_row["name"] = $data['name'];
array_push($a_json, $a_json_row);
}

}
else
{
$a_json['call']=false;
$a_json['message']="Problem to collect word.";
}

$json = json_encode($a_json);
print_r($json);

Когда я проверяю, если условие не выполнено, и я получаю сообщение непосредственно от другого «Проблема собрать слово». Это означает, что $ _POST [«term»] не определено.

Как я могу получить входное значение?

1

Решение

Чтобы убедиться, что значения были отправлены, вы можете увидеть, какие заголовки браузер отправил на веб-сервер с помощью PHP для тестирования.

Это возможно с помощью функции apache_request_headers (), но она работает только в том случае, если PHP запускается на Apache как модуль.

  • Как использовать apache_request_headers ():

Если PHP работает на Apache как модуль, то заголовки, отправляемые браузером, могут быть получены с помощью функции apache_request_headers (). В следующем примере кода для вывода значения из этого вызова функции используется print_r:

print_r(apache_request_headers());

Вывод из вышеперечисленного с использованием примера запроса от Google Chrome будет выводить что-то похожее на следующее:

Array
(
[Host] => www.testing.local
[Connection] => keep-alive
[User-Agent] => Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.206.1 Safari/532.0
[Cache-Control] => max-age=0
[Accept] => application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
[Accept-Encoding] => gzip,deflate,sdch
[Accept-Language] => en-US,en;q=0.8
[Accept-Charset] => ISO-8859-1,utf-8;q=0.7,*;q=0.3
)
  • Альтернатива, когда PHP запускается как CGI:

Если PHP не запускается как модуль на Apache, заголовки браузера должны храниться в $Массив SERVER, ключом которого является имя заголовка запроса, преобразованное в верхний регистр, переносы заменены на подчеркивания и с префиксом HTTP

Тот же запрос, приведенный выше, показывает соответствующие строки из $ _SERVER:

[HTTP_HOST] => www.testing.local
[HTTP_CONNECTION] => keep-alive
[HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.206.1 Safari/532.0
[HTTP_CACHE_CONTROL] => max-age=0
[HTTP_ACCEPT] => application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
[HTTP_ACCEPT_ENCODING] => gzip,deflate,sdch
[HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8
[HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.3

Альтернативный метод — создать нашу собственную функцию, если функция apache_request_headers () не существует, которая извлекает только значения из $ _SERVER и преобразует имена ключей в тот же стиль, что и apache_request_headers (). Это работает так:

if(!function_exists('apache_request_headers')) {
function apache_request_headers() {
$headers = array();
foreach($_SERVER as $key => $value) {
if(substr($key, 0, 5) == 'HTTP_') {
$headers[str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))))] = $value;
}
}
return $headers;
}
}

Новая функция объявляется только в том случае, если функция с таким именем еще не существует. Конечным результатом является то, что независимо от того, существует ли внутренняя функция PHP, вы сможете вызывать функцию с этим именем в своем коде.

Цикл сделан хотя $Массив SERVER и любой, чей ключ начинается с HTTP добавляется в массив, а ключ транслируется через серию вызовов функций в том же формате, который возвращается функцией apache_request_headers ().

  • Просмотр заголовков HTTP в Google Chrome

В Chrome есть вкладка «Сеть» с несколькими элементами, и когда я нажимаю на них, я вижу заголовки справа на вкладке.

Нажмите F12 на окнах или ⌥⌘I на Mac, чтобы вызвать инструменты разработчика Chrome.

введите описание изображения здесь

  • Попробуйте получить значения, не зная методов HTTP

Вы можете определить, какой тип запроса использовался (GET, POST, PUT или DELETE) в PHP, используя

$_SERVER['REQUEST_METHOD']

Для более подробной информации смотрите документация для переменной $ _SERVER.

Или вы можете получить значения, используя $ _REQUEST [‘you_variable’].

Примечание. $ _REQUEST — это переменная, отличная от $ _GET и $ _POST, в PHP она обрабатывается как таковая: изменение элементов $ _GET или $ _POST во время выполнения не повлияет на элементы в $ _REQUEST и наоборот.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]