使用Ajax Fileupload生成文件

使用Ajax Fileupload生成文件,ajax,jquery-file-upload,Ajax,Jquery File Upload,我的应用程序是一个MVC.NET4.0应用程序 我的申请相当简单。我打开一个文本文件,并将其上载以进行处理,然后作为excel文件返回。这正如预期的那样有效 excel文件通过actionresult控制器返回。没有错误。它按照我想要的方式工作 问题是,当我使用blockUI调用ajaxStart时,它可以工作。但是,在返回文件时,在显示文件结果并显示一条消息后,绝不会触发ajaxStop或ajaxSuccess以关闭微调器-是否要打开文件、保存文件或取消 我正在使用jQueryFileUplo

我的应用程序是一个MVC.NET4.0应用程序

我的申请相当简单。我打开一个文本文件,并将其上载以进行处理,然后作为excel文件返回。这正如预期的那样有效

excel文件通过actionresult控制器返回。没有错误。它按照我想要的方式工作

问题是,当我使用blockUI调用ajaxStart时,它可以工作。但是,在返回文件时,在显示文件结果并显示一条消息后,绝不会触发ajaxStop或ajaxSuccess以关闭微调器-是否要打开文件、保存文件或取消

我正在使用jQueryFileUpload、blockUI和jQuery1.9.1

$('#fileupload').fileupload({
    dataType: 'json',
    type: 'POST',
    url: fileuploadpath,
    autoUpload: true,
    beforeSend: function () {
    $.blockUI({ 
        timeout: 0,
        message: '<h1><img src="../images/ajax-loader.gif" /> Processing...</h1>'
    }); 
    },
    complete: function() {
        //$.unblockUI();
    },
    done: function (e, data) {

        //$('.file_name').html(data.result.message.Name);
        //$('.file_type').html(data.result.message.Type);
        //$('.file_size').html(data.result.message.Length);
        $('.file_msg').html(data.result.message.Error);

    },
    success: function (data) {

        $.unblockUI();

        $('.file_msg').html(data.result.message.Error);
    }

});

一切都很好。我抓挠的地方是-为什么文件返回后旋转器没有关闭?我错过什么了吗?我已尝试将ajaxStop和ajaxStart绑定到文档,但这不起作用。ajaxStart被触发,但在文件返回时,ajaxStop被忽略。

删除“完成”和“完成”事件,并将此格式用于ajax调用:

    $(document).ready(function() {
                $('#fileupload').fileupload({
                    dataType: 'json',
                    type: 'POST',
                    url: fileuploadpath,
                    autoUpload: true,
                    timeout:60000,
                    beforeSend: function () {
                        $('#loader').show()
                    },
                    success: function (data) {

                        $('#loader').hide()
                         //$('.file_name').html(data.result.message.Name);
                        //$('.file_type').html(data.result.message.Type);
                        //$('.file_size').html(data.result.message.Length);
                        $('.file_msg').html(data.result.message.Error); //??? you are passing the error here
                    },
                    error: function(jqXHR, textStatus, errorThrown) {
                        $('#loader').hide()                       
                       if(textStatus==="timeout") {  
                           alert("A timeout occurred"); 
                       } else {
                           alert("This is  an other error"); 
                       }
                   }

                });
        });
注意:看到您在使用blockUi时遇到问题,我在这里使用了另一种方法

超时:

我设置了一个额外的参数“timeout”,并将其设置为60秒。您可以将其设置为“0”,这将是无限制的,但最好将其设置为有限值

将其放在HTML中,并给它一个“display:none”样式和一个id

<h1><img id="loader" src="../images/ajax-loader.gif" style="display:none"/> Processing...</h1>'
处理…'

注释掉这一行是有原因的:$.unbui();。另外,你的ajax让我有点困惑。你从哪里得到的?:成功只是在文件返回后没有被呼叫……我已经在回答中向你指出了这一点。“完成”事件使“成功”事件不会被触发。这就是我删除它的原因。嗨,Franco-出现了一个错误,因为.done和.fail属性不起作用-我想出了这个:}).ajaxComplete(函数(数据){//your returned data by success here$.unbui();}).ajaxError(函数(数据){//your returned data by error here});可能您使用的是旧版本的jQuery,在本例中,请从代码中删除导致问题的“complete”和“done”,只使用“success:”和“error:”正如我在回答中指出的,问题是您在“success”事件之前使用了“done”事件。您只需使用成功事件。我的示例中的代码有一个小的输入错误,我也已经纠正了。但是如果你用“完成”来纠正这个问题,你的代码会工作得很好,谢谢-明白了-但是文件返回仍然显示,微调器仍然旋转..成功似乎没有被调用。我甚至添加了一条警告信息。当文件返回时,微调器应消失…奇怪。取消锁定UI需要知道必须取消锁定的元素。无论如何,您也可以使用'show()'和hide()方法,这是我经常使用和更喜欢的方法。
<h1><img id="loader" src="../images/ajax-loader.gif" style="display:none"/> Processing...</h1>'