2016-10-30 145 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 –