Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS$http请求不适用于长持续时间请求_Javascript_Java_Angularjs_Jsp - Fatal编程技术网

Javascript AngularJS$http请求不适用于长持续时间请求

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分钟,那么页面状态不会更改

我有一个JSP页面,它在js文件中调用Angularjs控制器。Angularjs控制器调用$http服务向后端基于java的API(saveRecordToDB)发出POST请求。下面是代码片段。 接收到响应后,前端会在前端显示成功消息

当我为完成API(saveRecordToDB)所需时间较短的数据执行此代码时,大约需要1-2分钟,然后页面上将显示成功消息

但是,当我为需要很长时间才能完成API(saveRecordToDB)的数据执行此代码时,大约需要40-50分钟,那么页面状态不会更改为Successful。 我可以看到,API(saveRecordToDB)中的所有步骤都已针对这两个请求完成。 对于长持续时间请求,$http似乎无法捕获来自API的响应

JSP页面:

<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 = "";
        });
    }
}]);