天天看点

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代码部分省去。