我正在实现一个类似stackoverflow使用的投票系统。它正在使用ajax向网址发送POST请求。当不支持或启用javascript / ajax时,我想要一种优雅地失败的方法,甚至不考虑像/ voteup / id这样的GET,因为我正在改变数据库。 什么是最好的解决方案?我正在考虑一个表格,或者只是在没有启用js的情况下删除该功能。
SO上至少有三个相关条目,但我不能插入多个超链接
答案 0 :(得分:3)
将基本投票操作设为迷你形式,然后使用javascript停用其发布操作。
<form method=post action="hit-url">
<input type=hidden name=vote value="1" />
<input type=submit value="Vote Up" onSubmit="doVote(1);return false;" />
</form>
<form method=post action="hit-url">
<input type=hidden name=vote value="-1" />
<input type=submit value="Vote Down" onSubmit="doVote(-1);return false;" />
</form>
要使用启用了javascript的用户的链接替换这些内容:
<div id="voteupbutton">
<form method=post action="hit-url">
<input type=hidden name=vote value="1" />
<input type=submit value="Vote Up" onSubmit="doVote(1);return false;" />
</form>
</div>
<script>
document.getElementById("voteupbutton").innerHTML="<a href='script:return false' onClick='doVote(1);return false;'>Vote up</a>";
</script>
我没有测试过上面的内容。如果您正在使用jQuery或其他一些框架,那么将会有更优雅的方法来完成所有这些。
答案 1 :(得分:1)
直截了当的选项只是一个常规表单POST,即使它是URL / voteup / id,我也不确定为什么你不能这样做(甚至你提到的GET)。
将onsubmit="return false"
放入标记中以防止已启用JS的用户进行POST。
答案 2 :(得分:0)
虽然您无法使用链接提交表单,但如果您愿意,可以通过查询字符串使用链接来触发数据库操作。没有特定的脚本语言:
<===
if (querystring("v")) then {
v.value.writeToDatabase
}
===>
<a href="vote.xxx?v=a">Vote A</a>, <a href="vote.xxx?v=b">Vote B</a>