多响应AJAX请求
Multiple Response AJAX request
有没有一种方法可以让一个AJAX请求得到多个响应?
例如,如果向服务器发出GET请求,这将需要很长时间来计算,我怎么能让服务器偶尔发回响应,给我一些进度数据?
如果是这样的话,有人能发布一个例子吗?最好是Jquery,并解释服务器可以通过什么机制来做到这一点?
您可以使用两个ajax调用来实现这一点,一个用于运行进程,另一个用于定期轮询进度:
在服务器端:
public class ProgressInfo
{
public int Percent {get;set;}
public bool Done {get;set;}
}
public JsonResult DoCalculation(string id)
{
ProgressInfo progress = new ProgressInfo();
if(!string.IsNullOrEmpty(id))
{
Session[id] = progress;
}
//periodicly update progress
progress.Percent++;
}
public JsonResult GetProgress(string id)
{
ProgressInfo progress;
if(string.IsNullOrEmpty(id)
|| (progress = Session[id] as ProgressInfo) == null)
{
return Json(new {
success = false
});
}
if(progress.done)
{
Session.Remove(id);
}
return Json(new {
success = true,
done = progress.done,
percent = progress.Percent
});
}
在客户端:
var progressID = Math.random();
function doCalculation() {
$.post('<%=Url.Action("DoCalcluation")%>/' + progressID);
setTimeout(pollProgress, 1000);
}
function pollProgress() {
$.post('<%=Url.Action("GetProgress")%>/' + progressID, function(response){
if(!response.success) {
alert('Cannot find progress');
return;
}
if(response.done) {
alert('Done!');
} else {
alert('Progress at ' + response.precent + '%');
setTimeout(pollProgress, 1000 /*1 second*/);
}
}, 'json');
}
快速回答:不,不可能。
您应该发送更多的请求以获得更多的响应
您很可能需要服务器端编码的帮助,因为看起来您需要反向ajax或也称为comet-push的东西。我不知道你在服务器端使用哪种语言,但基本的想法是,只要浏览器允许使用无休止的循环(在服务器端)并在连接活跃时推送数据,就可以延迟http响应
你可能想看看这个:http://code.google.com/p/google-web-toolkit-incubator/wiki/ServerPushFAQ
看看xajax,它可以发回多个响应,并且可以将它们重定向到特定区域。在这方面,xajax比jQuery要好得多。我可以发出一个请求,服务器可以编写一个包含HTML、JavaScript、调用等多个响应的响应。你甚至可以说,用附加、替换等选项把这个放在那里,把那个放在那里。非常酷。jQuery应该这样做,然后我可以一次性切换到jQuery。。。这是唯一一件让我无法转换的事情。
一个Ajax请求--------------->您得到一个响应。
你实际上能做的是。
检查响应数据和根据提取的数据执行不同的操作。
相关文章:
- ajax请求的顺序总是不同的
- 从ajax请求中获取javascript对象
- Ajax请求文档就绪会导致jquery加载缓慢
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- JavaScript代码未正确检查ajax请求
- node.js请求数据事件未在CORS ajax调用中触发
- jQuery Ajax GET请求工作不正常
- "日期“;AJAX请求返回的类型值未定义
- Django - 响应请求 AJAX
- 使用 jQuery 的 CORS 请求 - $.ajax()
- 如果无线电值为 ==1,则请求 ajax
- 如何处理对循环中发出的多个异步请求(AJAX 调用)的响应
- POST请求ajax jquery错误
- CasperJS don'我没有请求AJAX
- 使用这种Facebook风格的Lightbox-请求AJAX-在一个页面上覆盖多个按钮
- 400错误请求ajax post请求
- 如何在开始发送请求ajax之前延迟3秒
- 与jQuery同时请求AJAX
- 使用POST请求AJAX发送json对象