天天看點

jQuery之$.getJSON使用

近日做一即時資訊提示功能時采用定時重新整理,原來使用.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代碼部分省去。