Я пытаюсь реализовать функцию динамического поиска в html, jQuery, ajax и php. Проблема заключается в том, что функция поиска выполняет поиск только тогда, когда вы ввели 2-3 буквы. Например: при нажатии буквы «f» она должна возвращать каждую строку в базе данных, которая содержит букву «f». Возврат данные пуст. (Он должен вернуть 20 значений, я протестировал запрос) Теперь он возвращает результат только при записи «foo», возможно, это потому, что это единственная строка, которая имеет имя. На этот раз она возвращает структуру XML:PHP, ajax, xml, jQuery - динамический поиск возвращает только одно значение
<picture>
<picuser>CorrcetUser</picuser>
<picurl>CorrectURL</picurl>
<pictime>CorrectTime</pictime>
<picid>CorrectID</picid>
<comment>
<commenttime>Foo</commenttime>
<commentuser>Foo</commentuser>
<commenttext>Foo</commenttext>
</comment>
<description>
Foo bar
</description>
</picture>
Вот код прямо сейчас:
файла JavaScript
$(document).ready(function() {
$(".search").keyup(function() {
var searchbox = $(this).val(); // get the string in the searchbox
var dataString = 'searchword=' + searchbox;
if (searchbox == '') {
} else {
$.ajax({
type : "POST",
url : "search.php",
data : dataString,
dataType : "xml",
async: false,
cache : false,
success : function(data, textStatus, jqXHR) {
//Data repsonse from server
console.log(data);
},
error: function (jqXHR, textStatus, errorThrown)
{
}
});
}
});
});
Здесь представлен search.php
<?php
include ('dbconnect.inc.php');
if ($_POST) {
echo '<?xml version="1.0" standalone="no"?>';
$searchword = $_POST['searchword'];
$sql = "SELECT * FROM picture WHERE description LIKE :searchword";
$query = $dbh -> prepare($sql);
$query -> execute(array('searchword' => '%' . $searchword . '%'));
$nr=0;
$outputXML ="";
$results = $query->fetchAll(PDO::FETCH_ASSOC);
foreach($results as $row) {
$outputUser = $row['userName'];
$outputPicURL = $row['picURL'];
$outputTime = date('Y-m-d H:i', $row['time']);
$outputString = $row['description'];
$outputPicID = $row['pictureID'];
$outputXML.= "<picture>
<picuser>$outputUser</picuser>
<picurl>$outputPicURL</picurl>
<pictime>$outputTime</pictime>
<picid>$outputPicID</picid>
<comment>
<commenttime>Foo</commenttime>
<commentuser>Foo</commentuser>
<commenttext>Bar</commenttext>
</comment>
<description>
Foo bar
</description>
</picture>";
}
echo $outputXML;
}
?>
I подумал, что это легкое решение, но здесь я застрял. И интересно, почему данные пуст?
'async: false,' почему ?? –
Я думал, что это хорошая практика при получении из базы данных, это плохая идея? Он работает в любом случае. – user2553827
Это для интрасети или интернет-сайта? Вероятно, это плохая идея, потому что это атака DOS, ожидающая своего появления. Представьте, что пользователь приходит на сайт и начинает снова запускать событие keyup вашего окна поиска, отправляя множество запросов на ваш сервер. Тогда представьте, что несколько пользователей делают то же самое. Если они используют стандартные браузеры (chrome, IE, firefox и т. Д.), То существует ограничение на количество запросов, которые могут быть сделаны, но если они используют настраиваемый браузер, предназначенный для таких атак, вы даете очень простое способ довести ваш сервер с помощью атаки DOS – elitechief21