首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

++ web项目怎么请求一次返回多次

2012-12-18 
高手进++web项目如何请求一次返回多次?最近做了一个交换机管理的项目,有一个批设置要求实现读取、替换、统一

高手进++ web项目如何请求一次返回多次?
最近做了一个交换机管理的项目,有一个批设置要求实现读取、替换、统一设置功能,批设置弹出层中有多个选项和选择处理的开始行数和结束行数。如:用户在批设置中选择一个处理项,进行读取功能操作返回数据大量数据,我想让它一部分一部分的返回,如果处理完再返回后动态修改页面上的数据,因为数据量大就会很卡!! 注意:这个项目不适用分页功能
在其他论坛上看到一个解决方法是,用两个ajax请求,一个发送处理请求。另一个不停的去刷结果;问题是不知道怎么做,烦恼;

求高手解答????????
[最优解释]
代码已测试

前台代码:(为方便使用了jquery的ajax,你要测试请同样引入jquery文件,也可略微改动使用原生ajax)


<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  var url=document.URL;
  
  ///index:调用时直接传0,
  ///callback:所有数据获取完成后的回调函数,会获得结果字符串
  ///nowdata:调用时不要传递
  function getdata(index,callback,nowdata)
  {
    if(!nowdata) var nowdata="";
    $.get(
  url+"?type=data&index="+index+"",
  {},
      function(str)
      {
        var backdata=eval(str);
        nowdata+=backdata.str;
        if(backdata.isEnd=="False")///若没有结束标志,递归调用发ajax请求
        {
          getdata(index+1,callback,nowdata);
        }
        else///结束标志为真,结束递归,调用回调函数,返回结果
        {
          if(callback) callback(nowdata);
          return;
        }
      }
    )
  }
  getdata(0,function(data){
    alert(data);
    var resobj=eval(data);//解析json字符串,得到数组
    alert(resobj.length);
  });
</script>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
</body>
</html>

后台代码:(使用了stringbuilder,请using System.Text命名空间)

protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString["type"] == "data")//判断是否是请求数据的ajax请求
            {
                int index =int.Parse(Request.QueryString["index"]);
                if (index == 0)//若序号为0,说明是第一次请求,当调用函数获取数据
                {
                    data = getData();
                }
                bool isEnd;


                string nowStr = getNowData(index, 100,out isEnd);
                Response.Write("({'str':""+nowStr+"",'isEnd':'"+isEnd.ToString()+"'})");
                Response.End();
            }
        }
        public static string data=string.Empty;
        /// <summary>
        /// 获得数据
        /// </summary>
        /// <returns></returns>
        string getData()
        {
            StringBuilder str = new StringBuilder();
            str.Append("[");
            for (int i = 0; i < 100; i++)
            {
                str.Append("{'a':'a','b':'b'}");
                if (i != 99)
                    str.Append(",");
            }
            str.Append("]");
            return str.ToString();
        }
        /// <summary>
        /// 返回本次请求应发送的字符串
        /// </summary>
        /// <param name="index"></param>
        /// <param name="num"></param>
        /// <param name="isEnd"></param>
        /// <returns></returns>
        string getNowData(int index,int num,out bool isEnd)
        {
            int nextNum = data.Length - index * num;
            string result;
            if (nextNum > num)
            {
                result = data.Substring(index * num, num);
                isEnd = false;
            }
            else


            {
                result = data.Substring(index * num, nextNum);
                isEnd = true;
            }
            return result;
        }


[其他解释]
哪里有什么一次请求多次返回这回事
还两个ajax请求来回刷....没有这种说法
就一个ajax请求,带上参数,先查询部分数据,发送到前台,回调函数中处理,可同时发第二次请求,或等处理完再发亦可,......
就这样不就行了?若不能确定需要几次才能完成,可使用递归

另外的方法就是,用定时器发ajax请求,请求都得带上参数以便确定查询哪部分数据,每隔一点时间发一个,这样后台可以每接到一次请求就返回相应数据,不就行了?前台后台都能有足够时间处理
[其他解释]
引用:
哪里有什么一次请求多次返回这回事
还两个ajax请求来回刷....没有这种说法
就一个ajax请求,带上参数,先查询部分数据,发送到前台,回调函数中处理,可同时发第二次请求,或等处理完再发亦可,......
就这样不就行了?若不能确定需要几次才能完成,可使用递归

另外的方法就是,用定时器发ajax请求,请求都得带上参数以便确定查询哪部分数据,每隔一点时间发一个,这样后台可以每接到一次请……
我请求一次,后台返回的数据是一次性通过交换机返回的,而且返回数据不是在数据库中查的?
[其他解释]
引用:
引用:
哪里有什么一次请求多次返回这回事
还两个ajax请求来回刷....没有这种说法
就一个ajax请求,带上参数,先查询部分数据,发送到前台,回调函数中处理,可同时发第二次请求,或等处理完再发亦可,......
就这样不就行了?若不能确定需要几次才能完成,可使用递归

另外的方法就是,用定时器发ajax请求,请求都得带上参数以便确定查询哪部分数据,每隔一点时间发一个……

一样嘛,一次性获得了所有数据一样可以分批发到前台嘛,自己后台标记记录个序号嘛,标记好哪些是已经发送到前台的,下次请求来了接着发不就行了,这有什么问题
[其他解释]
引用:
引用:
引用:
哪里有什么一次请求多次返回这回事
还两个ajax请求来回刷....没有这种说法
就一个ajax请求,带上参数,先查询部分数据,发送到前台,回调函数中处理,可同时发第二次请求,或等处理完再发亦可,......
就这样不就行了?若不能确定需要几次才能完成,可使用递归

另外的方法就是,用定时器发ajax请求,请求都得带上参数以便确定查询哪部……
问题是怎么多次请求和返回,你说得方法没用过,能不能给个简单示例!感谢了,上次提问的问题没人回答也没结贴,我把上两个帖子的分也给你!
[其他解释]
那我写个例子嘛,后台代码我用C#写
你后台获取到的数据是什么形式嘛,字符串还是datatable什么的?
[其他解释]
引用:
那我写个例子嘛,后台代码我用C#写
你后台获取到的数据是什么形式嘛,字符串还是datatable什么的?
返回JSON数据交换格式
[其他解释]
引用:
引用:
那我写个例子嘛,后台代码我用C#写
你后台获取到的数据是什么形式嘛,字符串还是datatable什么的?
返回JSON数据交换格式

做成什么格式我不管,你自己做
那我就以字符串为例,假设是一个非常长的字符串,把字符串一截一截发送到客户端
当然如果是其他格式自己分批转化为字符串
[其他解释]
引用:
引用:
引用:
那我写个例子嘛,后台代码我用C#写
你后台获取到的数据是什么形式嘛,字符串还是datatable什么的?
返回JSON数据交换格式

做成什么格式我不管,你自己做
那我就以字符串为例,假设是一个非常长的字符串,把字符串一截一截发送到客户端
当然如果是其他格式自己分批转化为字符串
 好的,不明白再问你!谢谢了!
http://topic.csdn.net/u/20120720/15/4ac80d6e-6c56-46f3-a0bc-401666cd4dc8.html
http://topic.csdn.net/u/20120824/08/aead22b9-3f6e-4a70-96f9-02ee02be8f10.html

http://topic.csdn.net/u/20120724/09/cd5b8737-ed3a-44a5-80dc-f1e06a702d67.html
上面三个帖子你回一句,我将积分给你,因为没人回答所以没结贴
[其他解释]
注意到你的目的似乎是为了每次获取部分结果立即处理,
前台代码修改了一下更能满足需要:

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
    <title>无标题页</title>
</head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  var url=document.URL;
  
  ///callback1:每次请求成功的回调函数,获得本次请求的字符串和序号
  ///callback2:所有数据获取完成后的回调函数,会获得总的结果字符串
  ///index:调用时直接传0,
  ///nowdata:调用时不要传递
  function getdata(callback1,callback2,index,nowdata)
  {
    if(!nowdata) var nowdata="";
    $.get(
  url+"?type=data&index="+index+"",
  {},
      function(str)
      {
        var backdata=eval(str);
        nowdata+=backdata.str;
        if(callback1)
        {
          callback1(backdata.str,index);//执行回调1,可以对本次请求结果进行处理
        }
        if(backdata.isEnd=="False")///若没有结束标志,递归调用发ajax请求
        {
          getdata(callback1,callback2,index+1,nowdata);
        }
        else///结束标志为真,结束递归,调用回调函数2,返回结果
        {
          if(callback2) callback2(nowdata);
          return;
        }
      }
    )
  }
  getdata(function(data){
    alert(data);
  },
  function(data)
  {
    alert(data);
  },0
  );
</script>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
</body>
</html>


[其他解释]
引用:
注意到你的目的似乎是为了每次获取部分结果立即处理,
前台代码修改了一下更能满足需要:

HTML code


<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<script type="text/javascript" src=……
对你我真是无言以表,总之非常感谢了!我把你的代码刚改了,已经成功了,现在将这段代码加入到项目里!另外程序有个问题不过改了result = data.Substring(index * num, num);应该改成result = data.Substring(index * num, num+index*num);
你的QQ多少,能加你不?以后有问题可以再次请教!上面有三个帖子路径,你只回了一个还有两个你如果不要我撒给别人了........

热点排行