好的,我需要向运行ASP :: PERL的服务器发送大量请求,并让服务器将进度回发到调用页面。基本上 - >告诉服务器在文件共享中上传一大堆文件,然后在检查每个文件的错误/上传/成功或失败时更新客户端上的div。
有没有办法在后端ASP页面中放置一些回调函数来调用加载页面上的客户端JavaScript函数?这必须在服务器上循环工作,所以基本上是在上传每个文件之前从服务器到客户端的pingback,直到检查/上传所有文件。
答案 0 :(得分:2)
就像上面的评论所说的那样(我很确定)你必须通过民意测验来做到这一点。
将文件发送到服务器时,使用setTimeout()功能注册回调函数。此功能将“轮询”服务器,询问操作的状态(有多少文件...%完成)。如果操作没有完成,只需重新注册相同的函数 - 再次使用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);
}
答案 1 :(得分:0)
你可能会从这个post获得一些里程数。主题是批量电子邮件,但该策略适用于您的要求..
答案 2 :(得分:0)
感谢所有帮助人员。我想出了如何做我们需要的事情。它归结为我们想要对每个文件的调用进行停顿,这样我们就不会用一大堆文件上传调用来压倒我们的后端服务器。因此,我们选择了一个基本上进行异步调用的recursoin策略,然后等待成功回调并处理结果 - 然后再次调用该方法。这是一些代码:
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();
}