我使用javascript,json,ajax,mysql创建一个简单的实时搜索引擎。我认为一切都好。但是当我搜索类似的东西时--c ++,c#它什么都没有显示。请帮我。这是我的代码:
<input type="text" id="search" class="form-control" placeholder="Enter your book name..." onkeyup="loadDoc()"/>
<div id="resultView"></div>
var ajaxRequest;
函数ajaxFunction(){
try{
ajaxRequest = new XMLHttpRequest();
}catch(e){
try{
ajaxRequest = new ActiveXObject("Msxm12.XMLHTTP");
}catch(e){
try{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
alert("Your browser need to update!");
return false;
}
}
}
}
function loadDoc(){ ajaxFunction();
manipulateFunction(ajaxRequest);
}
function manipulateFunction(xhttp){
var searchWord = document.getElementById('search').value;
console.log(searchWord);
var queryString = '?searchString=' + searchWord;
console.log(queryString);
var resultArea = document.getElementById('resultView');
if(!searchWord.replace(/\s/g, '').length){
resultArea.innerHTML= "Please search something valid...";
}else{
xhttp.open("GET",'search.php'+ queryString,true);
xhttp.onreadystatechange = function(){
if(xhttp.readyState === 4 && xhttp.status === 200){
var data = JSON.parse(xhttp.responseText);
console.log(data);
if(data.length > 0){
var html = "<table border='1px'>";
html += "<tr>"
html += "<th>ID</th><th>Name</th><th>Author Name</th><th>Category</th><th>Price</th>";
html += "</tr>";
for(i=0; i<data.length; i++){
var bookId = data[i].book_id;
var bookName = data[i].book_name;
var bookAuthor = data[i].book_author;
var bookCategory = data[i].book_category;
var bookPrice = data[i].book_price;
html +="<tr>";
html += "<td>" + bookId + "</td><td>" + bookName + "</td><td>" + bookAuthor + "</td><td>" + bookCategory + "</td><td>" + bookPrice + "</td>";
html += "</tr>";
}
html += "</table>";
resultArea.innerHTML = html;
}else{
resultArea.innerHTML = "Sorry No Result found in our database!";
}
}else{
resultArea.innerHTML = "Waiting for server response....";
}
}
xhttp.send();
}
}
<?php
try{
$db = new PDO("mysql:host=localhost;dbname=book_db", "root", "");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if(isset($_GET['searchString'])){
$searchItem = $_GET['searchString'];
$ query =&#34; SELECT * FROM book_details
WHERE book_name like&#39;%$ searchItem%&#39;&#34 ;;
$ STH = $ db-&gt; query($ query);
$ STH-&GT;调用setFetchMode(PDO :: FETCH_OBJ);
$someData = $STH->fetchAll();
echo json_encode($someData);
}
}catch(PDOException $error){
echo "<pre>";
echo $error;
echo "</pre>";
}
&GT;
答案 0 :(得分:0)
我刚刚使用PHP,JSON和Javascript开发了一个网站搜索功能,我会采取这种行动:
a)在执行JSON.parse时,是否在控制台中记录了任何错误?根据我的经验,直接的json_encode / JSON.parse交互不起作用,因为反斜杠和引号的问题 - 它可能适合您的设置,但我发现我需要在php中执行此操作: echo str_replace('\“','\\'',str_replace(”'“,”\'“,json_encode($ sqlresultset)));
另外,如果上述情况没有帮助,并且如果您已经尝试过所有这些,请道歉:
b)确保sql语句返回您将搜索字符串硬编码到其中时所期望的内容,例如: SELECT * FROM book_details WHERE book_name like'%c#%'
不要忘记嵌入式引号的问题(需要加倍),大小写差异(不记得mysql是否忽略了这些)。
c)确保search.php在使用适当的searchString参数从Web浏览器直接运行时按预期工作。
d)代码防御性地称为“如果它可能出错,它就会出问题”。因此,在search.php中添加一些代码,以便在searchString参数为/ not / set时输出合适的内容,而不是忽略这种情况。如果您的ajax调用以某种方式不发送参数字符串,或者格式化不正确,您将立即知道。
希望其中一些有用。
顺便说一句,一旦它正在工作,我真的会建议你做一些事情来处理潜在的字符集问题 - 我的方法是将所有内容音译为ascii进行匹配,这样就可以毫无痛苦地完成工作。似乎适合我的用户。