开发者

How to stop xmlhttp.open duplicating the entire page? (ajax livesearch)

开发者 https://www.devze.com 2023-02-10 05:09 出处:网络
I am using a simple \"live search\" script that displays the results from a MySQL database as the user types into a text box. It works perfectly fine if the Javascript is pointing to a completely sepa

I am using a simple "live search" script that displays the results from a MySQL database as the user types into a text box. It works perfectly fine if the Javascript is pointing to a completely separate pag开发者_StackOverflowe but I need it to point to the same page. Unfortunately when I try and do this the page is duplicated within itself as the results are generated.

This works as expected:

    Document called: "test.php" containing JavaScript below and test2.php containing the PHP code

    xmlhttp.open("GET","test2.php?livesearch="+str,true);
    xmlhttp.send();

This creates a page within a page:

    Document called: "test.php" containing both the JavaScript and PHP code below

    xmlhttp.open("GET","?livesearch="+str,true);
    xmlhttp.send();

I understand that it's because it is opening itself in a loop but I'm not sure what I am supposed to change in the code to avoid this. Any help would be greatly appreciated as I haven't found much help via Google.

Here is all my code:

Javascript

function showResult(str)
{
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("livesearch").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","&livesearch="+str,true);
xmlhttp.send();
}

PHP Code

if(isset($_GET['livesearch'])) {liveSearch();}

function liveSearch() {
    $q=$_GET["livesearch"]; 
    $sqlQuery = "SELECT * FROM something WHERE something LIKE '%" . $q . "%' ;
    etc etc etc
}


Why would you want the code to point to itself? Seems logical to have a web service that would return only the content that is needed. It is not like you have to duplicate the code, just make some common method that spits out the content in the full page or in the web service.

If you need to call the same page, you can always use a regular expression to rip out the content that you need instead of replacing the whole page.

0

精彩评论

暂无评论...
验证码 换一张
取 消