一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法
2009-01-12 14:55
381 查看
问题描述:需要在GIS项目中实现多边形查询,将多个坐标传回服务器端当作查询的条件,然后返回查询结果。我们使用AJAX完成这部分操作。
而使用AJAX查询数据时,响应回客户端的信息有一定的上限 (即AJAX不能传回大量的数据)。下面给出我的解决方案。
一、使用AJAX将“查询条件”存到服务器端,返回一个令牌(token)。
二、引入脚本文件,令牌当作参数。脚本文件是通过令牌生成的查询结果。
详细实现:
1.buss.js
WebService是一个AJAX封装,参数为:WebService(地址,成功时执行的方法,失败时执行的方法,条件);
2.GISWCFService.svc
GISWCFService.svc 是一个WCF文件,目的参照其注释。
3.Global.cs
Global.cs是自定义的一个全局类,用来保存数据。
4.js.aspx
js.aspx文件目的是生成一个JS文件。我们用他来构建一个方法的调用。
执行顺序:
1.buss.js的WebService方法提交查询条件给服务器。
2.GISWCFService.svc把条件存到服务器,并且返回一个令牌,方便客户端查找。
3.buss.js的
调用生成好的JS代码。这一步直接调用结果(类似ConstructRestQueryLayerUrlSuccess('{key, value}');)。
而使用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}');)。
相关文章推荐
- 一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法 (转)
- 一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法
- 一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法
- 一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法
- 一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法
- 一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法
- 一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法
- 一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法
- (24):Silverlight 2 与浏览器交互相关辅助方法
- (24):Silverlight 2 与浏览器交互相关辅助方法
- 一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)
- 一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)
- 一步一步学Silverlight 2系列(19):如何在Silverlight中与HTML DOM交互(上)
- silverlight获取浏览器信息交互数据的方法
- 一步一步学Silverlight 2系列(19):如何在Silverlight中与HTML DOM交互(上)
- 一步一步学Silverlight 2系列(19):如何在Silverlight中与HTML DOM交互(上)
- 一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)
- 一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)
- 一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)
- 一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)