我该如何解决实时搜索引擎错误?

时间:2018-04-04 02:09:17

标签: javascript mysql json ajax

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

1 个答案:

答案 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进行匹配,这样就可以毫无痛苦地完成工作。似乎适合我的用户。