解决 ajax response 上限问题

问题描述:需要在GIS项目中实现多边形查询,将多个坐标传回服务器端当作查询的条件,然后返回查询结果。我们使用AJAX完成这部分操作。

 

而使用AJAX查询数据时,响应回客户端的信息有一定的上限 (即AJAX不能传回大量的数据)。下面给出我的解决方案。

 

      一、使用AJAX将“查询条件”存到服务器端,返回一个令牌(token)。

      二、引入脚本文件,令牌当作参数。脚本文件是通过令牌生成的查询结果。

 

详细实现:

1.buss.js

 

     WebService("GISWCFService.svc/ConstructRestQueryLayerUrl", function(obj){
        document.body.appendChild(document.createElement('script')).src = "webservice/js.aspx?uuid="+obj;
     }, ConstructRestQueryLayerUrlError, { Where: Where, geometry: jsonRestPolygon });

WebService是一个AJAX封装,参数为:WebService(地址,成功时执行的方法,失败时执行的方法,条件); 

 

2.GISWCFService.svc

 

[OperationContract]
[WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public string ConstructRestQueryLayerUrl(string Where, string geometry) 
{
    if (isAuthenticatedUser() == false) { return ""; }//用户验证
    string[] str = {Where, geometry};//查询条件存到数组中
    string key = System.Guid.NewGuid().ToString();//得到一个TOKEN
    Global.GetInstance().Dic.Add(key, str);//将查询条件存到全局变量中
    return key;//返回TOKEN给客户端
}

GISWCFService.svc 是一个WCF文件,目的参照其注释。

 

3.Global.cs

 

public class Global
{
	  private Global() { }
	
	  private static Global uniqueGlobal = new Global();
	  public static Global GetInstance(){
	      return uniqueGlobal;
	  }
	
	  private Dictionary<String, string[]> dic = new Dictionary<string,string[]>();
	
	  public Dictionary<String, string[]> Dic
	  {
	      get { return dic; }
	      set { dic = value; }
	  }
}

 Global.cs是自定义的一个全局类,用来保存数据。

 

4.js.aspx

 

public partial class js : System.Web.UI.Page
{
  private PoliceService policeService = new PoliceService();//实例化查询对象
  protected void Page_Load(object sender, EventArgs e)
  {
    if (Request.Params != null)// 若有参数
    {
      string key = Request.Params["uuid"].ToString();//得到TOKEN
      string[] content = Global.GetInstance().Dic[key];//通过TOKEN取查询条件
      string output = policeService.ConstructRestQueryLayerUrl(content[0], content[1]);//查询

      Response.Clear();
      Response.ClearHeaders();
      Response.AppendHeader("content-type", "text/js"); 
      Response.Write("ConstructRestQueryLayerUrlSuccess('" + output + "');");//生成方法
      Response.End();
    }
  }
}

 js.aspx文件目的是生成一个JS文件。我们用他来构建一个方法的调用。

 

 

执行顺序:

1.buss.js的WebService方法提交查询条件给服务器。

2.GISWCFService.svc把条件存到服务器,并且返回一个令牌,方便客户端查找。

3.buss.js的

 

 document.body.appendChild(document.createElement('script')).src = "webservice/js.aspx?uuid="+obj;

 调用生成好的JS代码。这一步直接调用结果(类似ConstructRestQueryLayerUrlSuccess('{key, value}');)。


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值