近日做一即時資訊提示功能時采用定時重新整理,原來使用.net的ajax方法擷取資料,一切完好,但是當有大量資料導出成xls檔案或其他檔案時,便會産生浏覽器死掉的情況!不過在firefox下正常。通過多次測試,發現是ajax方法引起的bug,不過具體是什麼原因,至今未獲答案,後放棄.net的ajax方法,決定使用jQuery的getJSON方法來從用戶端取伺服器端資料,具體使用方法如下:
一,建立一般處理程式GetMsg.ashx
<%@ WebHandler Language="C#" Class="GetMsg" %>
using System;
using System.Web;
using FOB.Core.Define;
using FOB.Core.Entity;
using FOB.CMS.Entity;
using JSONSharp;
using System.Text;
using System.Web.SessionState;//在ashx檔案使用session時引用
public class GetMsg : IHttpHandler, IReadOnlySessionState
{
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write(GetNewMsg());
}
public string GetNewMsg()
{
System.Data.DataTable dt =new System.Data.DataTable();//擷取datatable
return CreateJsonParameters(dt);
}
/// <summary>
/// 将datatable轉化為Json格式字元串(網上收集)
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string CreateJsonParameters(System.Data.DataTable dt)
{
StringBuilder JsonString = new StringBuilder();
if (dt != null && dt.Rows.Count > 0)
{
JsonString.Append("[");
for (int i = 0; i < dt.Rows.Count; i++)
{
JsonString.Append("{ ");
for (int j = 0; j < dt.Columns.Count; j++)
{
if (j < dt.Columns.Count - 1)
{
JsonString.Append(dt.Columns[j].ColumnName.ToString() + ":" + "/"" + dt.Rows[i][j].ToString() + "/",");
}
else if (j == dt.Columns.Count - 1)
{
JsonString.Append(dt.Columns[j].ColumnName.ToString() + ":" + "/"" + dt.Rows[i][j].ToString() + "/"");
}
}
if (i == dt.Rows.Count - 1)
{
JsonString.Append("} ");
}
else
{
JsonString.Append("}, ");
}
}
JsonString.Append("]");
return JsonString.ToString();
}
return null;
}
public bool IsReusable {
get {
return false;
}
}
}
二,建立web頁面
1.js腳本部分
$(document).ready(function() {
getMessages();
});
function getMessages()
{
var data_html="";
$.getJSON(
"GetMsg.ashx",//資料提供檔案(注意路徑)
{MsgID:"1"},//傳遞查詢參數(可以不要)
function(json){
//循環取json中的資料
if(json!=null){
$.each(json,function(i)
{
data_html += "<a>" + json[i].Subject + "</a><br>";
}
)
$.messager.show(0, data_html);//messager是别人寫的一個基于jQuery的消息插件
}
}
}
)
}
$(document).ready(function(){
window.setInterval("getMessages()",10000);
});
由于在web頁面中沒有寫html,html代碼部分省去。