2016-10-30 110 views
0

即时通讯使用Ajax与JavaScript和数据处理的PHP页面与GET。当GET查询为空时,是否可以从php页面发送数据?我想这样做是因为我有一个实时搜索过滤结果,但我希望匹配结果在用户在搜索框中输入内容并且字符串与搜索框匹配时显示,当字段为空时,我希望显示所有结果。因此,如果用户在搜索框中输入内容并获得匹配结果,然后按退格键删除它,我希望所有结果都显示出来。所以显然最好的办法是能够在php页面上做些什么,当查询是空的时候,但当我这样做时,它不起作用。什么是实现这一目标的最佳方式?Ajax响应空GET

所以JavaScript的网页看起来是这样的:

function showResults(str) { 
if (str.length == 0) { 
    document.getElementById("results").innerHTML = ""; 
    return; 
} else { 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function() { 
     if (this.readyState == 4 && this.status == 200) { 
      document.getElementById("txtHint").innerHTML = this.responseText; 
     } 
    }; 
    xmlhttp.open("GET", "query.php?q=" + str, true); 
    xmlhttp.send(); 
} 

}

PHP的页面看起来如下:

$q = $_REQUEST["q"]; 

if ($q !== "") { 
....Get Data from database or elsewhere here 

echo $reponse; 

} 

如果我的PHP页面上它后面不工作:

if ($q == "") { 
....Get Data from database or elsewhere here 

echo $reponse; 

} 

如果我检查空或isset它也不工作propery。

我可以做一些事情时,搜索输入是空的地方是JavaScript的网页

if (str.length == 0) { 
    document.getElementById("results").innerHTML = ""; 
    return; 
} 

我怎样才能使PHP页面上查询或其他操作时,搜索是空的?所以我需要ajax在字段为空时向我发送数据库中的所有结果。

+0

您能澄清您的问题并发布您正在使用的代码吗? –

+0

也许我不完全理解你的问题,但你试过'isset()'或'empty()'吗? – Mardzis

+0

是的,我在上面添加了一些代码。谢谢。 –

回答

1

也许我在这里有点偏离主题,但我想为您的特定情况提出一种完全不同的技术。

这里是:在初始页面加载时,下载网页上的所有搜索结果。当用户在搜索框中输入一些文本时,只需使用JavaScript在客户端的网页上解析搜索结果即可。当用户删除输入的文本时,再次使用JavaScript来显示所有搜索结果。这样,用户就不必为每个“输入”发送HTTP请求,从而增加了用户输入文本和获取相关搜索结果之间的响应时间。

同样,我的答案可能是无关紧要的,但我前一段时间实现了这个功能,结果与一次又一次发送GET/POST请求相比,效果令人惊叹。

从PHP发送JSON为JavaScript在页面加载:

<?php 

    function get_all_search_results() 
    { 
     // Database query to get all search results in an array 
     $search_results_array = ""; 

     // Convert the array to a JSON object 
     $json = json_encode($search_results_array); 

     // Echo it 
     echo $json; 
    } 

?> 

在页面加载,由一个onload调用上述功能的JavaScript功能是这样的:
// JSON对象 变种searchResultsArray;

function getAllSearchResults() 
    { 
     // An ajax request to get all search results in a variable 
     var allresults = // result of the ajax request 

     // JSON decode the results 
     searchResultsArray = JSON.parse(allresults); 
    } 
+0

是的,但结果是数组中的php对象,所以我会将这些发送到JavaScript? –

+0

当页面首次加载并且搜索框为空时,是否要显示所有搜索结果? – NavkarJ

+0

是的,即使在搜索框中键入内容之前,也能够在php中显示页面加载的所有结果。问题是当某人输入某些东西然后将其删除并且搜索字段再次变空时,我无法查询它似乎无法正常工作的succes php页面上的空白$ _GET。 –

0

是的,你可以发送一个GET请求没有查询字符串。实际上,无论您何时点击浏览器使用的网页,您的都会发送GET请求,例如。当您在地址栏中输入http://google.com并按回车键时,浏览器会向该URI发送GET请求,并且Google服务器会返回其页面。

由于Mardzis在评论中指出,你可以在你的PHP代码中使用empty()功能:

<?php 

if (!empty($_GET['query'])) { 

    $query = $_GET['query']; 

    // Return results for specific query... 

} else { 

    // Return all results... 

} 

编辑

既然你已经发布你的JavaScript代码,我发现了一些:

function showResults(str) { 
if (str.length == 0) { 
    // If str is empty - isn't this where you want your "empty" query? But you don't 
} else { 
    // If str is not empty, you send the request. 
} 

好像str是空的,你根本没有发送请求。我对么?

+0

好吧,正如我上面提到的,我已经尝试所有可能的组合与isset和空,并没有工作 –

+0

我已经更新答案,可能是JS? –

+0

是的,但我也尝试删除如果str.length == 0,我有相同的结果php页面不会发送任何东西时得到查询是空的也许我需要把这些结果json然后发送给javascript来处理它在if str.length == 0 –