【发布时间】:2014-06-29 10:25:56
【问题描述】:
前段时间我用 ajax 和 php 做了一个搜索功能。您可以用文本填写文本框,它会尝试在存储在数据库中的所有国家/地区之间找到匹配项。 现在我正在完善代码并使其成为 PDO,但我破坏了一些东西,我无法找出是什么。
这是我的纯 HTML
<head>
<title>Ajax</title>
<link href="style/style.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="scripts/Javascript.js"></script>
</head>
<body>
<div id="main">
<h1 class="title">Enter your country please</h1>
<input type="text" id="search" autocomplete="off" onchange="">
<h4 id="results-text">Showing results for: <b id="search-string">Array</b></h4>
<ul id="results"></ul>
</div>
</body>
这是我的 Jquery 和 javascript。请注意,我没有对 HTML 或 javascript 进行任何更改,因此不会出现类型错误。
$(document).ready(function() {
alert('asdf');
function search() {
var query_value = $('input#search').val();
$('b#search-string').html(query_value);
if(query_value !== ''){
$.ajax({
type: "POST",
url: "search.php",
data: { query: query_value },
cache: false,
success: function(html){
$("ul#results").html(html);
}
});
}
return false;
}
$("input#search").live("keyup", function(e) {
clearTimeout($.data(this, 'timer'));
var search_string = $(this).val();
if (search_string == '') {
$("ul#results").fadeOut();
$('h4#results-text').fadeOut();
}
else {
$("ul#results").fadeIn();
$('h4#results-text').fadeIn();
$(this).data('timer', setTimeout(search, 100));
};
});
});
这是我的 Search.PHP
<?php
class SearchEngine{
private $html;
public function __construct($conn){
$this->html = '<li class="result">
<h3>NameReplace</h3>
<a target="_blank" href="ULRReplace"></a>
</li>';
if (isset($_POST["query"])) {
$search_string = mysql_real_escape_string($search_string);
}
else{
$search_string = 'b';
}
if (strlen($search_string) >= 1 && $search_string !== ' ') {
$query = 'SELECT * FROM country WHERE name LIKE "%' . $search_string . '%"';
$result = $conn->prepare($query);
$result->execute();
$result_array = $result->fetchAll();
foreach ($result_array as $result) {
$display_name = preg_replace("/" . $search_string . "/i", "<b>" . $search_string . "</b>", $result['name']);
$display_url = 'sadf';
$output = str_replace('NameReplace', $display_name, $this->html);
$output = str_replace('ULRReplace', $display_url, $output);
echo($output);
}
}
}
}
?>
问题:
永远不会创建 Post 查询,为此我做了一个 isset,所以现在没有创建 Post 查询。它将创建一个值为“B”的 Post Query。
我认为页面永远不会更新,但我不能 100% 确定,因为帖子永远不会被创建,因此查询永远不会更新。并且由于某种原因,结果没有放在正确的位置。
任何帮助将不胜感激。请温柔,我是 Ajax 的新手,我更想了解而不是有解决方案。谢谢
【问题讨论】:
-
如果你
var_dump($_POST);- 有什么显示吗?如果您尝试手动导航到更新 SQL 的 PHP 页面会发生什么? -
我无法对帖子进行 var_Dump,因为它永远不会被创建。我测试了 javascript.js 并调用了其中的函数,但没有做他们应该做的事情。手动导航到 PHP 页面是什么意思?
-
@KrijnvanderBurg 你在这个问题上还需要帮助吗?
-
我又问了这个问题 10 分钟,得到了解决。但现在我有另一个问题。它返回 HTML 两次。但是你的答案还有一些其他缺陷提到了我的代码,所以我会调查一下。