2016-07-25 69 views
0

我的網頁上有簡單的表單,可將​​搜索變量傳遞到外部頁面。該功能正如預期的那樣工作,我想更改結果爲的顯示方式Javascript在iframe中顯示錶單結果

我想在相同頁面作爲搜索框顯示搜索結果,即我不想要打開新的窗口或選項卡。理想情況下,我想在隱藏的<div>中顯示結果,並完全遠離iframe,但我認爲這不可能?

兩個頁面(搜索結果)都在同一個域,但是我只能訪問編輯搜索頁面代碼。

我需要更改當前代碼才能使其工作。如果有更好的方法可以做到這一點,比如使用AJAX等,我會接受建議。對於JS來說很新,所以所有的幫助都非常值得讚賞。

成功搜索單詞'sport'後,結果頁面URL的格式如下:

http://example.com//search/C__Ssport__Orightresult__U 

我的代碼到目前爲止如下;

HTML

<form action="" onsubmit="return search()"> 
    <input id="SearchInput" placeholder=" Search..." type="text"> 
    <input type="hidden" id="Base" value="http://example.com/search/"> 
    <input type="submit" value="Submit"> 
</form> 

JS

<script type="text/javascript"> 
    function search(){ 
     var BaseURLInput, BaseURL, searchInput, searchString, locationHref, charRegExString, base64Regex; 
     var base64_encoding_map = {"=":"PQ==", "/": "Lw==", "\\":"XA==", "?":"Pw=="}; 
     var escapeRegExp = function(string) { 
      return string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); 
     } 
     BaseURLInput = document.getElementById("Base"); 
     searchInput = document.getElementById("SearchInput"); 

     if (searchInput && BaseURLInput) { 
      BaseURL= BaseURLInput.value; 
      searchString = searchInput.value; 
      for (var specialChar in base64_encoding_map) { 
       charRegExString = escapeRegExp(specialChar); 
       base64Regex = new RegExp(charRegExString, "g"); 
       searchString = searchString.replace(base64Regex, base64_encoding_map[specialChar]) 
      } 
      searchString = encodeURIComponent(searchString); 
      locationHref = BaseURL+ "C__S" + searchString + "__Orightresult__U"; 
      window.open(locationHref,'_blank'); 
     } 
     return false; 
    } 
</script> 

回答

0

而不是打開搜索結果頁,你可以做一個AJAX調用。

在這個答案你如何做他們一個很好的例子: How to make an AJAX call without jQuery?

的想法是用AJAX調用調用結果頁面直接嵌入結果返回給你到你喜歡的HTML容器。

+0

確切地說AJAX調用是這種情況下的方法。一旦你掌握了基本知識,它們就非常簡單,不要被它們嚇倒。您始終可以在SO – Bardo

+0

中發佈您的疑問結果頁面不會返回JSON數據,它只是一個包含書名,作者等的結果表。這是否重要? –

+0

不,一個AJAX調用可以返回任何你需要的東西,從純文本到JSON或HTML。你只需要知道返回給你的數據類型並相應地進行管理 – Bardo