2016-07-25 62 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