jquery跨域获取数据以及分页

今天做了一个jquery跨域获取josn数据的功能,同时对获取的数据进行分页。看代码:

html 代码:

 

代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    
<title>无标题页</title>
    
<script type="text/javascript" src="js/jquery.js"></script>
    
<script type="text/javascript">
    var PageSize
=2;//每页显示数量
        jQuery(function() {
            ShowPage(
"1");
        });        
        jQuery(function(){
           jQuery.getJSON(
"http://91jquery.com/GetData.ashx?jsoncallback=?",{hid:'1007',hName:escape('艾希'),p:'1',pagenum:PageSize},function(data) {
                
                var jnData 
= data['d'];//获取数据 
                var getdata1="";
                
//展示查询出来的数据                
                jQuery.each(jnData,function(i){
                getdata1
+="<a href='Skins.aspx?id="+jnData[i].ID+"' title="+jnData[i].title1+" target=\"_blank\"><div class=\"list2 padding_10 dsli1 sizcache=\"6\" sizset=\"245\" bindex=\"1\"\"><img width=\"120\" height=\"120\" border=\"0\" src=\"http://lolpf.uuu9.com/skinImage/"+jnData[i].pic+"\"><p>"+jnData[i].title1+"<br /><em class=\"f_yel\">所属英雄:</em>"+jnData[i].hname+"<br /><em class=\"f_yel\">喜欢度:</em>"+jnData[i].score+"</p><span class=\"title8bg\"></span><span class=\"title8\">"+jnData[i].title+"</span></div></a>\n";                                              
                 }); 
                  jQuery(
"#we").html(getdata1);  
                  Getpage(data[
'count'],1);                  
            })
        })
        
//分页的样式展示
        function Getpage(count,page)
            {               
                var recordCount 
=count;//记录总数
                var PageIndex=page; //当前页   
                    if (PageIndex < 1)
                    {
                        PageIndex 
= 1;
                    }                      
                    var pageCount 
=GetPageCount(count);//总页数
                    if (PageIndex > pageCount && pageCount != 0)
                    {
                        PageIndex 
= pageCount;
                    }
                
             var fengye
="页次:"+PageIndex+"/"+pageCount+"&nbsp;&nbsp;每页"+PageSize+"条&nbsp;&nbsp;&nbsp;&nbsp;"+SetPage(pageCount,PageIndex)+""
             
             jQuery(
"#showp").html(fengye);
        
          }
    
//计算总页数        
    function  GetPageCount(count) //总页数
      {
          var pCount 
= count / PageSize;
          
if (count % PageSize != 0) { pCount++;}
          
return pCount;
       }
    
//点击上一页、下一页是触发该函数   
   function go(page)
    {      
        var getdata2
="";  
        jQuery.getJSON(
"http://91jquery.com/GetpfData.ashx?jsoncallback=?",{hid:'1007',hName:escape('艾希'),p:page,pagenum:PageSize},                function(data){
                var jnData 
= data['d'];                  
                jQuery.each(jnData,function(i){
                getdata2
+="<a href='Skins.aspx?id="+jnData[i].ID+"' title="+jnData[i].title1+" target=\"_blank\"><div class=\"list2 padding_10 dsli1 sizcache=\"6\" sizset=\"245\" bindex=\"1\"\"><img width=\"120\" height=\"120\" border=\"0\" src=\"http://lolpf.uuu9.com/skinImage/"+jnData[i].pic+"\"><p>"+jnData[i].title1+"<br /><em class=\"f_yel\">所属英雄:</em>"+jnData[i].hname+"<br /><em class=\"f_yel\">喜欢度:</em>"+jnData[i].score+"</p><span class=\"title8bg\"></span><span class=\"title8\">"+jnData[i].title+"</span></div></a>\n";                                                 
                 });
                 jQuery(
"#we").html(getdata2);   
                 Getpage(data[
'count'],page);                     
            })
    
    } 
   
//样式自定义 
    function SetPage(iMaxPage,iCurrPage) 
    {
        
if (iCurrPage < 1)
            iCurrPage 
= 1;
        
if (iCurrPage > iMaxPage)
            iCurrPage 
= iMaxPage;
        var sTemp 
= "";
        
if (iCurrPage > 1)
        {
            
if (iCurrPage < iMaxPage)
            {
                sTemp 
+= "<A  onclick=go("+(iCurrPage - 1)+")>上一页</A><A onclick=go(" + (iCurrPage + 1+ ")>&nbsp;&nbsp;1&nbsp;&nbsp;下一页</A>";           
            }
            
else
            {
               sTemp 
+= "<A onclick=go("+ (iCurrPage - 1)+")>上一页</A>&nbsp;&nbsp;末页";
            
            }
        }
        
else
        {
            
if (iCurrPage < iMaxPage)
            {
                sTemp 
+= "首页&nbsp;&nbsp;<A onclick=go("+(iCurrPage + 1)+")>&nbsp;&nbsp;下一页</A>";  
            }
            
else
            {
                sTemp 
+= "首页&nbsp;&nbsp;&nbsp;&nbsp;末页</A>";
            }     
           
        }
        
return (sTemp);
    }        
    
</script>
</head>
<body>
<div class="w620 clearfix" id="we"></div>
<div id="showp"></div>
</body>
</html>

 

 

 

后台一般处理程序:

主要是把根据条件查询出来的语句构造成josn格式 输出.

代码
<%@ WebHandler Language="C#" Class="GetpfData" %>

using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Text;

public class GetpfData : IHttpHandler {
    
    
public void ProcessRequest (HttpContext context) {
        context.Response.ContentType 
= "text/plain";
        
string hid = context.Request["hid"].ToString();
        
string hname =HttpUtility.UrlDecode(context.Request["hName"].ToString());
        
int num=Convert.ToInt32(context.Request["pagenum"].ToString());
        
int page=Convert.ToInt32(context.Request["p"].ToString());

        SqlParameter[] paremeter 
= {
                                  
new SqlParameter("@hid",SqlDbType.Int)
        };
        paremeter[
0].Value = hid;
        
int id  = (int)SqlHelper.ExecuteScalar(CommandType.Text, "select ID from Hero where hid=@hid",paremeter);
        
int count = (int)SqlHelper.ExecuteScalar("select count(*) from Skin where Name=" + id);//查询总记录数;
        //查询要显示的数据;
        
string sql = "select top " + num + " * from Skin where Name="+id+" and id not in(select top " + num * (page-1+ " id from Skin where Name="+id+" order by id desc) order by id desc";
        DataSet ds 
= SqlHelper.ExecuteDataset(sql);
        
//构造json格式;
        StringBuilder sb 
= new StringBuilder();
        sb.Append(
"[");
        
for (int i = 0; i <ds.Tables[0].Rows.Count; i++)
            {             
              sb.Append(
"{");
              sb.AppendFormat(
"'ID':'{0}','title':'{1}','title1':'{2}','pic':'{3}','score':'{4}','hname':'{5}','page':'{6}'", ds.Tables[0].Rows[i]["id"].ToString(), ds.Tables[0].Rows[i]["SkinTitle"].ToString().Length > 9 ? StringHelper.GetLeftStr(ds.Tables[0].Rows[i]["SkinTitle"].ToString(), 9) : ds.Tables[0].Rows[i]["SkinTitle"].ToString(), ds.Tables[0].Rows[i]["SkinTitle"].ToString(), ds.Tables[0].Rows[i]["Skinpic"].ToString(), ds.Tables[0].Rows[i]["Score"].ToString(), hname, page);  
              sb.Append(
"}");
              
if (i < ds.Tables[0].Rows.Count - 1)
              {
                  sb.Append(
",");
              }     
            }
        sb.Append(
"]");
        
string data = sb.ToString(); 
        
string callback = context.Request.QueryString["jsoncallback"];
       
 data = "{d:" + data + ",count:" + count + "}";
        context.Response.Write(callback
+"("+data+")");
        context.Response.End();       
    } 
    
public bool IsReusable {
        
get {
            
return false;
        }
    }

}

 思路很简单,就是每次查询给后台传入要查询的差数,再把Response.Write()出来的数据进行重新的展示。

这样做有很大问题的,如果访问量非常大的话,服务器会受不了的。解决方法:

1、加上缓存。

2、将要查询的json数据生成js文件,从js文件查询需要的数据。(但这样数据的实时更新就不行了的)。

对要处理的数据更新是很快情况下建议选择第二种方法是很不错的。

posted @ 2011-01-19 17:37  Snow*Cao  阅读(1328)  评论(0编辑  收藏  举报