【问题标题】:How can i solve live search engine error?如何解决实时搜索引擎错误?
【发布时间】:2018-09-13 11:08:04
【问题描述】:

我使用 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;
        }

    }

}

}

函数 loadDoc(){ ajaxFunction();

manipulateFunction(ajaxRequest);

}

函数操作函数(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 = "SELECT * FROM book_details WHERE book_name like '%$searchItem%'"; $STH = $db->查询($查询); $STH->setFetchMode(PDO::FETCH_OBJ);

        $someData = $STH->fetchAll(); 
        echo json_encode($someData); 
     }

 }catch(PDOException $error){

    echo "<pre>";
        echo $error;
    echo "</pre>";

 }

?>

【问题讨论】:

    标签: javascript mysql json ajax


    【解决方案1】:

    我自己刚刚使用 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/ 时输出合适的内容,而不是仅仅忽略这种情况。然后,您将立即知道您的 ajax 调用是否以某种方式未发送参数字符串,或者格式不正确。

    希望这能有所帮助。

    顺便说一句,一旦它开始工作,我真的建议您做一些事情来处理潜在的字符集问题 - 我的方法是将所有内容音译为 ascii 进行匹配,这样可以轻松完成工作并且似乎适合我的用户。

    【讨论】:

      猜你喜欢
      • 2012-10-07
      • 2014-01-17
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多