`
topcss
  • 浏览: 100936 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类
最新评论

解决 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}');)。


 

 

分享到:
评论

相关推荐

    实用工具类AjaxResponse

    在IT行业中,AjaxResponse是一个常见的后端工具类,主要用于处理前端与后端之间的异步通信,即Ajax请求的响应。Ajax技术允许网页不刷新整个页面就能与服务器交换数据并更新部分网页内容,大大提升了用户体验。这个名...

    Ajax中文乱码问题解决方案

    本文将深入探讨Ajax中文乱码问题的成因,并提供一系列解决方案。 **一、问题原因** 1. **编码格式不一致**:服务器与客户端(浏览器)之间使用的字符编码格式不同,例如服务器使用GBK编码,而浏览器使用UTF-8编码...

    解决Ajax 发送多个请求引发的并发问题

    总结,解决Ajax并发问题的关键在于有效管理请求的顺序和并发度。通过理解这些问题的根源,我们可以选择合适的策略来优化和控制Ajax请求,以确保数据的准确性和用户体验的流畅性。在.Net环境下,开发者可以利用各种库...

    ajax跨域问题的解决办法

    ajax跨域问题的解决办法 ajax跨域问题是指在使用ajax技术时遇到的跨域限制问题,即ajax请求不能跨域访问其他域的服务器资源。这种限制是由于浏览器的同源策略所引起的,同源策略规定一个域下的脚本只能访问该域下的...

    解决ajax跨域问题

    ### 解决Ajax跨域问题 在现代Web开发中,跨域问题经常出现并困扰着开发者。根据提供的文件信息,本文将详细介绍如何通过JSONP等方法解决Ajax跨域问题。 #### Ajax与同源策略 首先,我们需要了解为什么会出现跨域...

    response.getWriter().write()用于ajax

    服务器端的处理逻辑接收到AJAX请求后,会执行相关业务操作,然后使用`response.getWriter().write()`将结果编码为字符串并发送回客户端。 例如,在给定的`ChatController.java`中,可能包含一个处理聊天消息的AJAX...

    解决ajax请求后台,有时收不到返回值的问题

    一直以为是我后台程序有问题,晚上回到家才想起来ajax的问题,把ajax的异步处理改为同步,就出来效果了,具体的原因请看下文详解。 jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是...

    Laravel开发-ajax-response

    在Laravel框架中,Ajax(异步JavaScript和XML)响应是一种常见的交互方式,它允许前端与后端进行无刷新的数据交换,从而提升用户体验。本文将深入探讨如何在Laravel项目中实现Ajax响应,并提供相关实践指导。 一、...

    完美解决ajax访问遇到Session失效的问题

    现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象发起的而不

    通过生成Token解决Ajax请求安全问题AjaxTokenTest

    通过页头生成Token,进行请求验证,解决Ajax请求安全问题。目前为止我做的最多的防止ajax请求攻击的就是添加验证码、添加随机Token,限制同一请求在规定时间内的最大请求数量、服务器端校验数据正确性、尽量使用POST...

    jquery+asp ajax 中文乱码问题解决文档

    ### jQuery + ASP AJAX 中文乱码问题解决方案 在开发基于jQuery和ASP的Web应用程序时,中文乱码问题可能成为困扰开发者的一大难题。特别是在使用Ajax进行前后端数据交互时,中文字符可能会出现乱码现象,影响用户...

    ajax乱码解决方案

    总的来说,解决Ajax乱码问题的关键在于理解字符编码的工作原理,确保数据在整个传输过程中的编码与解码一致性,以及正确设置服务器和客户端的编码设置。在实际应用中,还应考虑跨平台和跨浏览器的兼容性,以确保解决...

    解决ajax返回innerHTML中javascript不能运行问题

    解决 Ajax 返回 innerHTML 中 JavaScript 不能运行问题 在实际应用中,我们经常会遇到使用 Ajax 返回某一个网页的内容到模板页面的某一个 `&lt;div&gt;` 标签中显示的操作。如果返回的值仅仅是文本类数据,不会影响模板...

    SpringBoot+SpringSecurity处理Ajax登录请求问题(推荐)

    为了解决Ajax登录请求问题,我们可以使用Spring Security的 Ajax 登录请求处理机制。首先,我们需要创建一个Spring Boot工程,并引入Web、Spring Security、MySQL和MyBatis依赖项。然后,我们需要配置application....

    Ajax 中文乱码问题

    本文将详细探讨如何解决Ajax请求过程中的中文乱码问题,并提供具体的解决方案。 #### 二、问题分析 在使用Ajax进行数据传输时,中文乱码问题通常出现在以下两个环节: 1. **发送表单数据时中文乱码**:当通过Ajax...

    Ajax uri 乱码问题总结

    总结来说,解决Ajax URI乱码问题的关键在于理解和匹配浏览器的编码行为,并在服务器端进行相应的配置。通过以上策略,可以有效地解决大部分浏览器的乱码问题,实现更好的跨浏览器兼容性。然而,对于特定情况,可能还...

    Ajax中responseText返回的是一个页面而不是一个值

    自己在struts2中的写好了业务逻辑用response返回的内容却是... 您可能感兴趣的文章:ajax的responseText乱码的问题的解决方法jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXMLAjax request response 乱码解决

    快速解决ajax请求出错状态码为0的问题

    今天在使用 ajax 向后台请求数据时出现错误,提示状态码为 0 ,后台采用的是 spring mvc 架构。 状态码为0是什么意思呢?查找了下,原来它意味着 (未初始化)即没有调用到send()方法,我原来代码如下 : $.ajax...

Global site tag (gtag.js) - Google Analytics