Я пытаюсь реализовать голосование, очень похожее на переполнение стека. Есть несколько пунктов, которые все имеют кнопку голосования рядом с ним. В настоящее время у меня это работает, но это делается на стороне сервера, отправляет сообщения назад и требует некоторое время для перезагрузки данных. Вот поток:
- Вы нажимаете кнопку голосования,
- запускает функцию javascript, которая щелкает скрытую кнопку ASP.NET (сделал это так, потому что на странице несколько кнопок голосования),
- кнопка срабатывает,
- обновляет базу данных, а затем
- страница отправляется назад и обновляется, показывая обновление.
Как использовать javascript и AJAX для устранения этого плохого пользовательского опыта? Я хочу, чтобы он работал как Stack Overflow, но я не использую MVC. Любая помощь, примеры, предложения будут великолепны. Спасибо.
Обновление:
Я реализовал это, но когда я ставлю точки останова на веб-метод, он даже не срабатывает, и я всегда получаю предупреждение об ошибке. Есть идеи?
JavaScript:
<script type="text/javascript">
$(document).ready(function () {
$("[id^=VoteMeUp]").click(function (event) {
var dta = '{ "VoteId":' + $(event.target).val() + '}';
$.ajax(
{
type: 'POST',
data: dta,
url: 'Default.aspx/SaveUpVote',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
//$(event.target).text("Vote Casted");
alert("Vote Casted");
},
error: function (x, y, z) {
alert("Oops. An error occured. Vote not casted! Please try again later.");
}
}
);
});
});
</script>
Код сзади (вы можете использовать C #, я знаком с обоими):
Imports System.Web.Services
Imports System.Web.Script.Services
<WebMethod()>
Public Shared Function SaveUpVote(ByVal VoteID As Integer) As Boolean
Dim test As Boolean = False
Dim mySQL As New SQLHandler
test = mySQL.UpdateVoteByID(VoteID)
Return test
End Function
HTML:
<input type="image" src="images/vote.png" id="VoteMeUp1" value="321" />