jQuery';反向回调';从ASP页面
好的,我需要向运行ASP::PERL的服务器发送一个大请求,并让服务器将进度发回调用页面。基本上->告诉服务器在一个文件共享中上传一大堆文件,然后在检查每个文件的错误/上传/成功或失败时更新客户端上的divjQuery';反向回调';从ASP页面,jquery,ajax,asp-classic,callback,Jquery,Ajax,Asp Classic,Callback,好的,我需要向运行ASP::PERL的服务器发送一个大请求,并让服务器将进度发回调用页面。基本上->告诉服务器在一个文件共享中上传一大堆文件,然后在检查每个文件的错误/上传/成功或失败时更新客户端上的div 有没有办法在后端ASP页面中放置一些回调函数来调用加载页面上的客户端JavaScript函数?这必须在服务器上循环工作,因此基本上是在上传每个文件时从服务器pingback到客户端,直到检查/上传所有文件。您可能会从中获得一些好处。主题是批量电子邮件,但该策略将满足您的要求。正如上面的评论所
有没有办法在后端ASP页面中放置一些回调函数来调用加载页面上的客户端JavaScript函数?这必须在服务器上循环工作,因此基本上是在上传每个文件时从服务器pingback到客户端,直到检查/上传所有文件。您可能会从中获得一些好处。主题是批量电子邮件,但该策略将满足您的要求。正如上面的评论所说,(我很确定)您必须通过轮询来实现这一点 将文件发送到服务器时,请使用该函数注册回调函数。此函数将“轮询”服务器,询问操作状态(有多少个文件…完成了多少%)。如果操作没有完成,只需在函数完成之前重新注册相同的函数——再次使用setTimeout()
var callback = function() {
// (1) Use ajax to get status from the server
// (2) Update the progress div
// (3) If complete, signal the user and hide the progress bar; otherwise register callback() again
}
var submitFiles = function() {
// Send files to server
setTimeout(callback, 1000);
}
谢谢大家的帮助。我知道怎么做我们需要的。归根结底,我们想在某种程度上暂停每个文件的调用,这样我们就不会因为一大堆文件上传调用而淹没后端服务器。因此,我们选择了一种递归策略,基本上是进行异步调用,然后等待回调成功并处理结果,然后再次调用该方法。下面是一些代码:
function doAjaxCall(targetCheckBox)
{
if ((targetCheckBox) == 'undefined' || targetCheckBox == null)
{
targetCheckBox = $('#toprint input:checkbox[id*=ChkIn]:checked:first');
if ($(targetCheckBox).length == 0)
{
alert('All Files Processed!');
if (!CheckForm()){
$('#checkinbtn').remove();
} else
{
$('#checkinbtn').removeAttr('disabled');
$('#checkinbtn').val('Check In');
}
return;
}
}
var res = $(targetCheckBox).val().split("/");
var targetID = res[res.length-1];
var test = document.getElementById('comment_'+targetID);
var commentField = $(test);
$.ajax({
type: "POST",
url: "loadfiles.asp",
data: getPostString($(targetCheckBox).val()),
success: function(result) {
if (result.indexOf('Error')> -1){
commentField.attr('style', 'background-color:#FF6267');
} else {
commentField.attr('style', 'background-color:#88CC55');
}
commentField.empty();
commentField.html(result);
$(targetCheckBox).remove();
doAjaxCall(null); // recurse on success until we don't have any more files
}
});
$("#fileCounter").remove();
}
这是一个有趣的话题。就我个人而言,我会让客户机轮询服务器,服务器定期更新一些状态表(或其他什么)。但我会看看其他人怎么说。哦。。。我想知道初始的“POST”目标是一个隐藏的iframe是否有效,然后服务器会做的是发回一系列“script”块。每个脚本块都将是完整的,并且只包含对父页面中更新状态的内容的函数调用。也许浏览器会在接收到脚本标记时解析并执行它们,即使整个页面还没有完成。@Pointy我想你说的可能是对的,浏览器在请求/响应周期完成之前不会解析数据。有点臭,Pointy,你很清楚;-)保持长时间运行的连接只是为了进度更新。。。一个好主意?不,我不认为这是一个好主意,但有人在互联网上运行百万美元的网站,做一些我不认为是好主意的事情。我不认为投票会对我起作用。我在客户端页面上列出了每个文件,用户希望知道每个文件的状态,而不仅仅是整个事务的状态。但我不能发送每个文件并按传统方式处理,因为我会在一个充满图形的大目录上把服务器打得死去活来。这是一个难题。好吧,我之前的想法和测试都是否定的,让我试试这个。感谢代码天空-我将把它的测试,看看它是否可以解决我的问题。当然,现在我需要用PERL编写一个web服务——但这是另一个问题。