Система голосования / оценки: как изящно провалиться, если JavaScript не поддерживается / не включен? - PullRequest
0 голосов
/ 15 января 2010

Я внедряю систему голосования, подобную той, которую использует stackoverflow. Это работает с ajax, отправляющим запрос POST к URL. Я хотел бы, чтобы изящно произошел сбой, когда javascript / ajax не поддерживается или не включен, GET-подобный / voiceup / id даже не рассматривается, потому что я изменяю базу данных. Какое лучшее решение? Я либо рассматриваю форму, либо просто удаляю функцию, если js не включен.

В SO есть как минимум три связанные записи, но я не могу вставить более одной гиперссылки

POST со ссылками без JavaScript

Ответы [ 3 ]

3 голосов
/ 15 января 2010

Сделайте мини-формы основных действий голосования, затем используйте 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 голос
/ 15 января 2010

Простая опция - это просто обычная форма POST, даже если она относится к URL / voiceup / id, и я не уверен, почему вы не можете этого сделать (или даже GET, который вы упомянули).

Поместите onsubmit="return false" в тег, чтобы предотвратить размещение сообщений пользователями, у которых включен JS.

0 голосов
/ 15 января 2010

Хотя вы не можете использовать ссылки для отправки форм, вы, безусловно, можете использовать ссылки для запуска действий базы данных, если хотите, через строку запроса. Без определенного языка сценариев:

<===
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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...