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