Ajax响应空GET

时间:2016-10-30 19:44:54

标签: javascript php ajax get

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

所以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检查它也不起作用。

只有在搜索输入为空时我可以执行的操作才能在javascript页面上

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

当搜索为空时,如何在php页面上进行查询或其他操作?所以当字段为空时,我需要ajax从数据库发送所有结果。

2 个答案:

答案 0 :(得分:1)

也许我在这里有点偏离主题,但我想为你的具体案例提出完全不同的技巧。

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

同样,我的回答可能是偏离主题的,但我刚刚实现了这一点,与一次又一次发送GET / POST请求相比,结果令人惊讶。

在页面加载时将JSON从PHP发送到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对象         var 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);
    }

答案 1 :(得分:0)

是的,您可以发送没有查询字符串的GET请求。事实上,每当您使用浏览器访问网页时, 发送GET请求,例如当您在地址栏中输入http://google.com并按Enter键时,您的浏览器会向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为空,则您根本不发送请求。我是对的吗?