Javascript AngularJS$http请求不适用于长持续时间请求
我有一个JSP页面,它在js文件中调用Angularjs控制器。Angularjs控制器调用$http服务向后端基于java的API(saveRecordToDB)发出POST请求。下面是代码片段。 接收到响应后,前端会在前端显示成功消息 当我为完成API(saveRecordToDB)所需时间较短的数据执行此代码时,大约需要1-2分钟,然后页面上将显示成功消息 但是,当我为需要很长时间才能完成API(saveRecordToDB)的数据执行此代码时,大约需要40-50分钟,那么页面状态不会更改为Successful。 我可以看到,API(saveRecordToDB)中的所有步骤都已针对这两个请求完成。 对于长持续时间请求,$http似乎无法捕获来自API的响应 JSP页面:Javascript AngularJS$http请求不适用于长持续时间请求,javascript,java,angularjs,jsp,Javascript,Java,Angularjs,Jsp,我有一个JSP页面,它在js文件中调用Angularjs控制器。Angularjs控制器调用$http服务向后端基于java的API(saveRecordToDB)发出POST请求。下面是代码片段。 接收到响应后,前端会在前端显示成功消息 当我为完成API(saveRecordToDB)所需时间较短的数据执行此代码时,大约需要1-2分钟,然后页面上将显示成功消息 但是,当我为需要很长时间才能完成API(saveRecordToDB)的数据执行此代码时,大约需要40-50分钟,那么页面状态不会更改
<div class="row" ng-if="!downloadFile">
<div class="col-sm-1" ng-if="brokerUploadCount > 0"><button ng-click="approve()" class="pull-right btn btn-success">Approval</button></div>
<div class="col-sm-1"><button ng-click="reject()" class="pull-left btn btn-danger">Reject</button></div>
</div>
<br>
<div class="row" ng-if="downloadFile">
<div class="col-sm-4">
<div class="col-sm-2"><b>SUCCESSFUL</b></div>
</div>
<script type="text/javascript" src="js/controller/Upload.js"></script>
我试图更改$http请求的超时时间。但不确定它是否正确。还尝试了异步调用
请有人建议我如何让$http服务等待很长时间,直到后端API执行完成。50分钟等待请求完成似乎是很长的时间。您是否考虑过更改UI,以便用户得到更快的响应,并且您可以向他们显示“您的数据库更新正在等待”之类的消息?实际上,一旦请求完成,UI上的下载按钮应该启用。在请求完成之前,我们无法启用该按钮。有什么办法可以做到吗?同样也不能减少后端时间。等待Ajax请求50分钟对我来说似乎非同寻常。这就是为什么我想知道你是否可以考虑另一种方法。但是,如果您确实需要这样做,这里有一个关于等待Ajax调用很长时间的问题,这可能对您很有用。等待请求完成需要50分钟。您可以尝试将数据分块发布,以便在UI中可以分步设置表单,这种类型的UI可以帮助您逐步发布数据。实际上,大多数浏览器都有其默认的超时时间,当由于超时而返回ajax调用时,它将返回一个错误状态“timeout”。如果您使用的是HTTP/1.1,那么您是否尝试过增加服务器响应上的“keep alive”头值?参考:50分钟等待请求完成似乎是一段很长的时间。您是否考虑过更改UI,以便用户得到更快的响应,并且您可以向他们显示“您的数据库更新正在等待”之类的消息?实际上,一旦请求完成,UI上的下载按钮应该启用。在请求完成之前,我们无法启用该按钮。有什么办法可以做到吗?同样也不能减少后端时间。等待Ajax请求50分钟对我来说似乎非同寻常。这就是为什么我想知道你是否可以考虑另一种方法。但是,如果您确实需要这样做,这里有一个关于等待Ajax调用很长时间的问题,这可能对您很有用。等待请求完成需要50分钟。您可以尝试将数据分块发布,以便在UI中可以分步设置表单,这种类型的UI可以帮助您逐步发布数据。实际上,大多数浏览器都有其默认的超时时间,当由于超时而返回ajax调用时,它将返回一个错误状态“timeout”。如果您使用的是HTTP/1.1,那么您是否尝试过增加服务器响应上的“keep alive”头值?参考:
pos.controller('excelCtrl', ['$scope', '$http', 'appService', 'FileUploader', function($scope, $http, appService, FileUploader) {
$scope.approve = function(){
var uploadUrl = "api/saveRecordToDB" ;
var dataSet = {
"period":$("#period").val(),
};
$http({
method: 'POST',
url: uploadUrl,
cache: false,
//timeout: 60 * 60 * 1000,
params: dataSet
}).success(function(data){
appService.showStatus("success");
$scope.downloadFile = true;
$scope.fileName = "";
});
}
}]);