这让我陷入困境。我显然不明白一些非常基本的东西,我希望有人能够阐明这个问题。
<form action="/tagged" method="get">
<input type="text" name="q" value="{SearchQuery}"/>
<input type="submit" value="Search"/>
</form>
在本页给我http://syndex.me/tagged?q=yellow但如果我改变/tagged
to /search
(tumblr 搜索表单的默认状态)它实际上做了正确的事情,并给出了一个 url 的效果http://syndex.me/search/yellow.
这一切只是因为,tumblrs 搜索实际上被破坏了。这是正确的。一家价值 8 亿美元的公司没有可行的搜索功能。问题是如果你去http://syndex.me/tagged/yellow它实际上works!。所以我只是想破解服务并切换/search
to tagged
。相当有精神。
我很高兴以任何可能的方式破解它...... jQuery?
非常感谢。
页面的各个部分是搜索功能背后的核心:
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)"
.
-
onsubmit
当用户按下 Enter 或点击“搜索”按钮时触发。
- 在 - 的里面
onsubmit
属性(又名事件处理程序),你注意到return handleThis(this)
。这个函数(在同一页定义;向前看)被调用this
关键字作为第一个参数。this
在事件处理程序的上下文中,指的是事件侦听器的所有者元素,在本例中<form>
.
In handleThis(formElm)
, 你发现"http://syndex.me/tagged/"+formElm.q.value
. formElm.q
指的是一个名为的输入元素q
在表单元素内。formElem.q.value
保存输入元素的值,其中包含搜索关键字。刚刚构建的 URL 被分配给window.location
,它发起一个新的请求http://syndex.me/tagged/
搜索术语.
在那行之后,你会看到return false
。在 - 的里面onsubmit
事件处理程序,你已经看到了return handleThis(this)
。返回值handleThis
被传递到onsubmit
事件处理程序。所以,该语句等于onsubmit="return false"
。这意味着表单不再提交自身。
- The action属性是没有定义的。如前所述,这是不需要的,因为表格未提交
return false
。当发生错误时,或者如果用户禁用了 JavaScript,表单将自行提交到定义在的 URLaction
。因为action
未指定属性,而是使用页面的当前 URL,http://syndex.me/
在这种情况下。所有命名的表单元素都会添加到请求中,因此最终的 URL 将是http://syndex.me/?q=
搜索术语
回到你的问题,<form action="/tagged"
方法=“获取”>`:
-
No
onsubmit
事件处理程序。
- 因为
onsubmit
未指定事件处理程序,HTML 表单将为由浏览器提交(一个虚构的onsubmit
处理程序将等于return true
.
- The action URL is defined to be
/tagged
,这意味着主机根目录下名为“tagged”的文件。在这种情况下:http://syndex.me/tagged?q=
搜索术语. (q=..
是来自名为的输入元素的结果q
).
当你改变时action
to /tagged/
代替/tagged
,提交的表单将请求以下页面:http://syndex.me/tagged/?q=
搜索术语
当你改变时/tagged
to /search
,您的表单提交至http://syndex.me/search?q=...
。从标题中可以看出,该位置重定向到http://syndex.me/search/...
.
此行为可能是使用中定义的规则来实现的.htaccess:
RewriteEngine On
RewriteRule ^/search\?q=(.*)$ /search/$1 [L,R=301]
明白了吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)