我写了一个方法(带有WebMethod属性),它给出了我的书籍列表:
public struct BOOK
{
public string BOOK_NAME;
public string BOOK_DESC;
}
[WebMethod]
public static List<BOOK> GetMyBooks()
{
string _connString = "Data Source=.;Initial Catalog=BookStore;Integrated Security=True";
SqlConnection _conn = new SqlConnection(_connString);
_conn.Open();
SqlCommand _com = new SqlCommand("select * from Book_TBL where IsActive='True' ", _conn);
_com.CommandType = System.Data.CommandType.Text;
SqlDataAdapter bookdataAdapter = new SqlDataAdapter(_com);
DataSet bookDS = new DataSet();
bookdataAdapter.Fill(bookDS, "Book_TBL");
List<BOOK> bookList = new List<BOOK>();
BOOK book;
foreach (DataRow dr in bookDS.Tables["Book_TBL"].Rows)
{
book = new BOOK();
book.BOOK_NAME = dr["book_name"].ToString();
book.BOOK_DESC = dr["book_desc"].ToString();
bookList.Add(book);
}
return bookList;
}
我编写了一个脚本,每隔5秒调用一次“GetMyBooks”方法,然后在我的WebForm2.aspx中用id:“pejiGrid”在div标签中显示:
<script>
$(document).ready(function () {
$("#go").click(function () {
setInterval(function () {
$.ajax({
type: "POST",
url: "WebForm2.aspx/GetMyBooks",
data: '{}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
for (var i = 0; i < response.d.length; i++) {
$("#pejiGrid").append("<tr><td>" + response.d[i].BOOK_NAME + "</td><td>" + response.d[i].BOOK_DESC + "</td></tr>");
}
}, });
}, 5000);
});
});
但我的方法和脚本在我的“#pejiGrid”中附加了重复的信息,我想只显示一次这个信息,有什么办法,我可以通过脚本来做到这一点吗?如果不可能,解决方案是什么?
答案 0 :(得分:1)
代码中的所有内容都可以。你的脚本只需要一个小的修正。用以下代码替换成功函数体:
var htm = [];
for(var i = 0; i&lt; response.d.length; i ++){ htm.push(“”+ response.d [i] .BOOK_NAME +“”+ response.d [i] .BOOK_DESC +“”); }
$( “#pejiGrid”)HTML(htm.join( ''));
如果我正确地理解了问题,那就是使用jQuery的'append'方法,它附加了从服务器收到的所有新数据。而不是你需要用新的数据替换旧数据。所以你需要使用'html'方法来替换div的内容。
还有一条建议。最好将“GetMyBooks()”等方法存储在专门为此目的开发的Web服务文件中。
祝你一切顺利!