我有一个简单的asp.net mvc应用程序和一些开发控件。主屏幕有一个按钮,从屏幕上获取日期并进行后端处理。意见:
@Html.DevExpress().Button(settings =>
{
settings.Name = "LoadData";
settings.Text = "Load Data";
settings.ToolTip = "Imports data from Holding API";
settings.ClientSideEvents.Click = "OnClick";
settings.UseSubmitBehavior = false;
}).GetHtml()
function OnClick(s, e) {
positionDate = ReportingPositionDate.GetDate().toDateString();
$.ajax({
type: "POST",
//url: "/ImportData/DataFileUpload",
url: "@Url.Action("DataFileUpload", "ImportData")",
data: JSON.stringify({ positionDate: positionDate }),
dataType: "text",
contentType: "application/json; charset=utf-8",
beforeSend: function () { lpImport.Show(); },
success: function (msg)
{
ImportDataGridView.PerformCallback();
ImportSuccessMessage.SetVisible(true);
ImportSuccessMessage.SetText(msg);
lpImport.Hide();
},
Error: function (xhr) {
alert(xhr)
ImportDataGridView.PerformCallback();
}
});
}
}主计长:
[HttpPost]
public ActionResult DataFileUpload(string positionDate)
{
// Reset validation error collection
ImportDataValidationErrors = new List<ImportFileRecord>();
string[] errs;
try
{
ReturnVal ="Some Long Running Process"
return Content(ReturnVal);
}
catch (Exception ex)
{
throw ex;
}
}进程大约需要50分钟(或更多)才能运行(预期)。控制器方法DataFileUpload在返回视图时正确执行所有操作,它只是挂断。我的猜测是,我的屏幕超时了,不接受来自控制器的任何响应。当我使用较小的数据集运行相同的进程时,从Controller查看获取值。知道这里会出什么问题吗?我的按钮设置有问题吗?感谢所有的帮助。
发布于 2017-04-05 20:47:57
Jquery默认超时值为0。这意味着在ajax中没有超时。如果浏览器有一些超时,完全有可能你会点击。
只有在指定了超时值选项时,jQuery才会调用setTimeout()。
还有另一个挑战。ajax (XMLHttpRequest)有浏览器超时( browser timeout ),每个浏览器都有不同,特别是IE浏览器。我想是30分钟左右吧。从技术上讲,你可以把timeout : 10000000设置在2.30~3小时之间。
我以前也遇到过这个问题。你可以用进度条来解决问题。使用进度条,您可以保持刷新您的视图。
对于您可以使用的简单ajax请求。
function uploadFile(){
myApp.showProgressDialog; //show dialog
var file=document.getElementById('fileName').files[0];
var formData = new FormData();
formData.append("file_name", file);
ajax = new XMLHttpRequest();
ajax.upload.addEventListener("progress", ProgressBarHandler, false);
ajax.addEventListener("load", OnCompleteHandler, false);
ajax.open("POST", "/to/action");
ajax.send(formData);
}
function ProgressBarHandler(event){
var percent = (event.loaded / event.total) * 100;
$('.bar').width(percent); // its coming from css
}
function OnCompleteHandler(){
myApp.hidePleaseWait(); //hide dialog
$('.bar').width(100);
}https://stackoverflow.com/questions/43241056
复制相似问题