读书人

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

发布时间: 2012-12-18 12:43:41 作者: rapoo

高手进++ 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多少,能加你不?以后有问题可以再次请教!上面有三个帖子路径,你只回了一个还有两个你如果不要我撒给别人了........

读书人网 >Ajax

热点推荐