投票/评级系统:如果不支持/启用javascript,如何正常失败?

时间:2010-01-15 19:42:37

标签: javascript html ajax

我正在实现一个类似stackoverflow使用的投票系统。它正在使用ajax向网址发送POST请求。当不支持或启用javascript / ajax时,我想要一种优雅地失败的方法,甚至不考虑像/ voteup / id这样的GET,因为我正在改变数据库。 什么是最好的解决方案?我正在考虑一个表格,或者只是在没有启用js的情况下删除该功能。

SO上至少有三个相关条目,但我不能插入多个超链接

POST with links without JavaScript

3 个答案:

答案 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>