jQuery';反向回调';从ASP页面

jQuery';反向回调';从ASP页面,jquery,ajax,asp-classic,callback,Jquery,Ajax,Asp Classic,Callback,好的,我需要向运行ASP::PERL的服务器发送一个大请求,并让服务器将进度发回调用页面。基本上->告诉服务器在一个文件共享中上传一大堆文件,然后在检查每个文件的错误/上传/成功或失败时更新客户端上的div 有没有办法在后端ASP页面中放置一些回调函数来调用加载页面上的客户端JavaScript函数?这必须在服务器上循环工作,因此基本上是在上传每个文件时从服务器pingback到客户端,直到检查/上传所有文件。您可能会从中获得一些好处。主题是批量电子邮件,但该策略将满足您的要求。正如上面的评论所

好的,我需要向运行ASP::PERL的服务器发送一个大请求,并让服务器将进度发回调用页面。基本上->告诉服务器在一个文件共享中上传一大堆文件,然后在检查每个文件的错误/上传/成功或失败时更新客户端上的div


有没有办法在后端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服务——但这是另一个问题。