2012-07-29 93 views
1

如何使用散列進行實時搜索? 現在我有一個簡單的jQuery搜索:jquery搜索和散列

$(function(){ 
/// Start searching 
     $("form#search-form").submit(function(e){  
      var hash = 'q=' + encodeURI(document.getElementById('q').value); 
      window.location.hash = hash; 
      e.preventDefault(); 
      $("#results").fadeOut(); 
      $.ajax({ 
       type:"GET", 
       data: $(this).serialize(), 
       url: "search.php", 
       success: function(msg){ 
         $("#results").html(msg).fadeIn();  
            } 
        });  
     }); 
}); 

正如你看到的,我已經在這裏

var hash = 'q=' + encodeURI(document.getElementById('q').value); 
window.location.hash = hash; 

加入到在哈希搜索輸入。所以我的想法是輸入「http:// url /#q = word」,並得到「word」的結果。目前,我的「散列函數」是無用的,它什麼都不執行 - 只是增加了地址欄的價值。我怎麼能讓jquery以這種方式執行?

我嘗試添加

if (window.location.hash != "") { 
} 

,但它並不能幫助。或者我曾經錯誤地做過。

回答

1

所以..可能是實在是太難了,但它的工作原理:

$(function(){ 
    $("form#search-form").submit(function(e){  
     e.preventDefault(); 
     var hash = 'search=' + $('#q').val() + '&lang=' + $('.lang:checked').val(); // radio-buttons have class="lang" 
     window.location.hash = hash; 
     search(); 
    }); 

    if (window.location.hash != "") { 
     search() 
    } 

    function search() { 
     var hash_arr = window.location.hash.substr(1).split('&'), 
      values = new Array(), 
      i = 0, 
      json = '{'; 

     for (var key in hash_arr) { 
      values = hash_arr[key].split('='); 
      if (i++ != 0) json += ','; 
      json += '"' + values[0] + '":"' + values[1] + '"'; 
     } 

     json += '}'; 

     $("#results").fadeOut(); 
     $.ajax({ 
      type:"POST", 
      data: { data : json }, 
      url: "test2.php", 
      success: function(msg){ 
       $("#results").html(msg).fadeIn();  
      } 
     }); 
    } 
}); 

在PHP:

$data = (array)json_decode($_POST['data']); 
$search = $data['search']; 
$language = $data['language']; 
+0

感謝您的回答。但就我而言,這種火箭科學根本行不通。我有這樣的錯誤:未定義的索引:search _and_ language - 它是'$ search'和'$ language'行。用'echo $ _POST ['data']'獲得'{\「search \」:\「word \」,\「lang \」:\「Engl \」}'; – zmogusnamas 2012-07-29 16:44:53

+0

嘗試'print_r($ data);'在我的第一行之後。它返回什麼? – Kir 2012-07-29 16:51:49

+0

我的老search.php看起來像這樣:http://pastebin.com/uHN9ajaE正如你所說我添加了:'$ data =(array)json_decode($ _ POST ['data']);' '$ search = $ data''search'];' '$ language = $ data ['language'];'並且沒有「空白搜索」 '$ var = $ data ['search'];'之後我替換了$ search_term' with'$ search' – zmogusnamas 2012-07-29 16:53:02

2

試試這個

$(function(){ 
    $("form#search-form").submit(function(e){  
     e.preventDefault(); 
     var hash = 'q=' + encodeURI(document.getElementById('q').value); 
     window.location.hash = hash; 
     search(); 
    }); 

    if (window.location.hash != "") { 
     search() 
    } 

    function search() { 
     var search = window.location.hash.replace('#q=',''); 

     $.ajax({ 
      type:"GET", 
      data: { 'search' : search }, 
      url: "test2.php", 
      success: function(msg){ 
       $("#results").html(msg).fadeIn();  
      } 
     }); 
    } 
}); 

爲了獲得更好的性能使用jquery.hashchange插件

+0

謝謝。它工作正常,這就是我想要的。但你知道,在搜索形式,我也有改變語言和通過我有不同的MySQL查詢的單選按鈕。是否可以從'

'獲取數據併發送?因爲我的search.php有這樣的索引:'$ language = $ _GET ['language'];'。所以它不適用於通過單選按鈕打開的不同語言 – zmogusnamas 2012-07-29 13:50:39

1

這是t他路怎麼附近的一切工作正常: 我有什麼指標:

$(document).ready(function() { 

    $("form#search-form").submit(function(e){  
     e.preventDefault(); 
     var hash = '' + encodeURI(document.getElementById('q').value); 
     window.location.hash = hash; 

     $("#results").fadeOut(); 
     $.ajax({ 
      type:"GET", 
      data: $(this).serialize(), 
      url: "search.php", 
      success: function(msg){ 
         $("#results").html(msg).fadeIn();  
      } 
     });  
    }); 

if (window.location.hash != "") { 
    s(); 
} 

function s() { 
    var s = window.location.hash.replace('#',''); 

    if($('#language1').attr('checked')===true) { 
    var lang = 'language1'; 
    } 
    else if($('#language2').attr('checked')===true) { 
    var lang = 'language2'; 
    } 
    else if($('#language3').attr('checked')===true) { 
    var lang = 'language3'; 
    } 

    $.ajax({ 
     type:"GET", 
     data: { 's' : s, language : lang}, 
     url: "search.php", 
     success: function(msg){ 
      $("#results").html(msg).fadeIn();  
     } 
    }); 
}  


}); 

在PHP:

$search = filter_var($_GET["s"], FILTER_SANITIZE_STRING); 
$search_term = urldecode($search); 

所以,地址欄的樣子:127.0.0.1/dictionary/#search_term 一個必要語言來自cookies - 所以它非常方便。唯一的小問題就像在你的腳本中(因爲我已經完成了你的腳本),search_term在地址欄中改變。我會盡力解釋這一點。如果我使用鏈接127.0.0.1/dictionary/#word,它會顯示「單詞」。如果我試圖將地址欄中的「單詞」更改爲「其他單詞」,則不會顯示任何內容 - 我必須重新加載頁面以獲取結果或者只需打開新的選項卡/窗口。我不知道爲什麼以前的代碼不起作用。可能這是我的錯誤 - 我不知道。

+0

如果所有的工作都是正常的)如果你需要腳本在改變地址欄上反應使用'jquery.hashchange'插件。它非常簡單:'$(window).hashchange(function(){//當你改變散列值時運行代碼})'。你可以在這裏下載它:http://benalman.com/projects/jquery-hashchange-plugin/ – Kir 2012-08-01 10:38:39

+0

哦!大。非常感謝。我看到這個插件兩次,看起來非常複雜。一切都很好。非常感謝!對不起,我厭倦了你一點:) – zmogusnamas 2012-08-01 11:13:11

+0

沒問題))) – Kir 2012-08-01 11:31:50