Has*_*aca 0 javascript asp.net ajax jquery
我想为新闻门户建立一个评论系统.
我希望jQuery AJAX检测是否有人添加了评论数据,它会自动更新slideDown动作中添加的评论.
我怎样才能做到这一点?谢谢.
(注意:我使用ASP.NET作为服务器)

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
$(document).ready(function () {
$.ajax({
url: 'WebForm1.aspx',
success: function (data) {
$("#Urunler").html(data);
}
});
});
</script>
<style>
li
{
width: 100px;
height: 30px;
background: yellow;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<ul id="Urunler" runat="server">
</ul>
</div>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是背后的代码,
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
namespace WebApplication2
{
public partial class WebForm1 : System.Web.UI.Page
{
SqlConnection cnn = new SqlConnection("Initial Catalog=Northwind;Data Source=localhost;Integrated Security=SSPI;");
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
cnn.Open();
SqlCommand cmd = new SqlCommand("SELECT FirstName FROM Employees", cnn);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
Urunler.InnerHtml += "<li>" + dr.GetString(0) + "</li>";
}
}
cnn.Close();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我做得对,你正在寻找类似facebook/gmail的实时通知.
您可以通过实现多个架构来实现它:
更新: 此文章似乎给位不同的技术的触摸来实现自己的目标.它可能有所帮助.
我来试一试!
这应该每五秒从服务器获取 LI,并将它们与任何现有评论进行比较,如果它们不同,请将新评论插入 DOM 并将它们向下滑动:
var comments = {
get: function () {
return $.ajax({
url : 'WebForm1.aspx',
cache : false
});
},
check: function (coll1, coll2, UL_ID) {
var diff = [];
$.each(coll2, function (_, li2) {
var same = false;
$.each(coll1, function (_, li1) {
if ($(li1).text() == $(li2).text()) same = true;
});
if (!same) diff.push(li2);
});
this.output(diff, UL_ID);
},
poll: function (UL_ID) {
var self = this;
self.get().done(function (data) {
self.check($(UL_ID).find('li'), $('<ul />').append(data).find('li'), UL_ID);
});
},
output: function (elems, UL_ID) {
$.each(elems, function (i, elem) {
$(elem).hide().delay(i * 300).slideDown(350).appendTo($(UL_ID));
});
},
init: function (UL, interval) {
var self = this;
setInterval(function () {
self.poll(UL);
}, interval);
this.poll(UL);
}
}
$(document).ready(function () {
comments.init('#Urunler', 5000);
// ^^ starts plugin ^^ ID ^^ polling speed (5 seconds)
});
Run Code Online (Sandbox Code Playgroud)
我强烈建议在数据库中给每个评论一个 UUID,然后使用它来比较以找到新的评论。
上面的代码现在只比较评论的内容,所以如果完全相同的评论被发布两次,可能会有问题。
似乎您的数据库输出的唯一内容是评论本身,没有唯一标识符,因此如果您为 UUID 添加一行,则需要更改数据库结构,这有点超出了范围在我看来的问题。
这是一个快速演示,其中数据库已替换为 localStorage
| 归档时间: |
|
| 查看次数: |
2355 次 |
| 最近记录: |