在没有php“?q =(myTerm)”的情况下打开基于搜索查询的URL,而使用简单的“/(myTerm)”

时间:2011-10-01 18:35:22

标签: jquery forms tumblr

这让我感到困惑。我显然不明白soemthing非常基本,我希望有人可以解释这件事。

        <form action="/tagged" method="get">
            <input type="text" name="q" value="{SearchQuery}"/>
            <input type="submit" value="Search"/>
        </form>    

On this page给了我http://syndex.me/tagged?q=yellow 但是,如果我将/tagged更改为/search(tumblr搜索表单的默认状态),它实际上会做正确的事情,并为http://syndex.me/search/yellow的效果提供一个网址。

所有这一切只是因为,tumblrs搜索实际上已被打破。那就对了。价值8亿美元的公司没有可行的搜索功能。问题是如果你去http://syndex.me/tagged/yellow它实际上有效!。所以,我只是想破解服务并将/search切换为tagged。非常精神。

我很高兴以任何可能的方式破解... jQuery?

非常感谢。

1 个答案:

答案 0 :(得分:3)

页面的各个部分是搜索功能的核心:

<强> JavaScript的:

function handleThis(formElm){
    window.location="http://syndex.me/tagged/"+formElm.q.value+"";
    return false;
}

<强> HTML:

<form onsubmit="return handleThis(this)" >
    <input type="text" name="q" value=""/>
</form> 

使用onsubmit="return handleThis(this)"将事件侦听器绑定到您的表单。

    当用户按Enter键或点击“搜索”按钮时,会触发
  • onsubmit
  • onsubmit属性(又称事件处理程序)中,您会注意到 return handleThis(this) 。使用this关键字作为第一个参数调用此函数(在同一页面中定义;向前看)。来自事件处理程序的上下文中的this引用事件侦听器的所有者元素,在本例中为<form>
    handleThis(formElm)中,您会注意到"http://syndex.me/tagged/"+formElm.q.valueformElm.q引用表单元素中名为q的输入元素。 formElem.q.value保存input元素的值,其中包含搜索关键字。刚刚构建的网址已分配给window.location,该http://syndex.me/tagged/会向return false search_terms 发起新请求。
    在该行之后,您会看到onsubmit。在return handleThis(this)事件处理程序中,您已看到handleThisonsubmit的返回值将传递给onsubmit="return false"事件处理程序。所以,语句等于return false。这意味着表单不再提交自己。
  • 操作属性未定义。如前所述,这不是必需的,因为表单未提交action。发生错误时,或者如果用户已禁用JavaScript,表单将自行提交到action中定义的URL。由于未指定http://syndex.me/属性,因此在此情况下使用页面的当前网址http://syndex.me/?q=。所有已命名的表单元素都会添加到请求中,因此最终的网址将为<form action="/tagged" search_terms

要回到您的问题,onsubmit method =“get”&gt;`:

  • 没有onsubmit 事件处理程序。
  • 由于未指定onsubmit事件处理程序,HTML表单将由浏览器提交 (假想的return true处理程序等于/tagged。< / LI>
  • 操作网址已定义 http://syndex.me/tagged?q= ,转换为名为“已标记”的文件主机的ROOT目录。在这种情况下:q=.. search_terms 。 (q是来自名为action)的输入元素的结果 当您将/tagged/更改为/tagged而不是http://syndex.me/tagged/?q=时,提交的表单将请求以下页面:/tagged search_terms

当您将/search更改为http://syndex.me/search?q=...时,您的表单会提交至http://syndex.me/search/...。从标题中可以看出,此位置重定向到RewriteEngine On RewriteRule ^/search\?q=(.*)$ /search/$1 [L,R=301]
使用.htaccess中定义的规则可能会实现此行为:

{{1}}

明白了?