Сценарии на стороне сервера onkeyup PHP
Я пытаюсь создать окно поиска, которое ищет имя из эластичной базы данных поиска, но когда я запускаю, оно всегда выдает мне ошибку, которая ----
Примечание: неопределенный индекс: значение в строке -> $query = $_GET['search_keyword'];
но из моего сценария я считаю, что он должен получить "search_keyword".
Поисковая строка --
<form method="GET" action="/latest/helloTestData">
<input type="text" name="sample_search" id="sample_search" onkeyup="search_func(this.value);">
</form>
Сценарий -
<script>
$(function () {
var minlength = 3;
$("#sample_search").keyup(function () {
var that = this,
value = $(this).val();
if (value.length >= minlength ) {
$.ajax({
type: "GET",
url: "/latest/helloTestData", // address to the php function
data: {
'search_keyword' : value
},
dataType: "text",
success: function(msg){
//we need to check if the value is the same
if (value==$(that).val()) {
//Receiving the result of search here
}
}
});
}
});
});
</script>
PHP ---
public function helloTestDataAction() {
$paramss = array('hosts' => array('localhost:9200'));
$client = new Elasticsearch\Client($paramss);
$query = $_GET['search_keyword'];
if ($query != "") {
$params = array();
$params['size'] = 1000000000;
$params['index'] = 'myindex';
$params['type'] = 'mytype';
$params['body']['query']['bool']['must'] = array(
array('match' => array('name' => $query)), // search data by input data
);
$esresult = $client->search($params);
if ($esresult < 1) {
echo "Your search did not match any documents. Please try different keywords.";
} else {
echo $esresult; //results found here and display them
}
}
return new Response('ok');
}
Может кто-нибудь знает, как решить эту проблему. Большое спасибо в продвинутом.
2 ответа
Modifiy $_GET['value']
в $_GET['search_keyword']
Так
public function helloTestDataAction() {
[...]
$_GET['search_keyword'];
[...]
}
Вы ищете ключ, который не будет в $_GET
массив, как, в ваш запрос AJAX, вы передаете ключ с именем search_keyword
и вот это ошибка
Быстро и просто! Внешний интерфейс передает набранный текст через GET по URL-адресу.
В этом тесте я поместил 2 файла в одну папку. Меняйте по мере необходимости.
Внешний интерфейс:
<script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.js"></script>
<div id="my_header" style="background-color:lightblue">
</div>
<input type="text" id="foo" value="bar" onkeyup="loadlink(this)" />
<script>
function loadlink(e){
$('#my_header').load('back.php?var='+e.value,function () {
$(this).unwrap();
});
}
</script>
Бэкэнд (back.php):
<?php
echo "received: " . $_GET["var"] . ' <br>at ' . gmdate('Y-m-d h:i:s \G\M\T', time());
?>