防止角度http post请求超时

时间:2018-02-17 07:36:42

标签: angularjs

我创建了一个AngularJs Post请求。请求包含一个漫长的过程需要超过2分钟来执行。但是我的角度请求在15秒后返回null错误。请求完美工作且没有错误。但是角度请求超时与在15秒内

 $http.post('/api/evaluateOmrExamination',{exam_id:$scope.curExam.id})
            .success(function(data,status,headers,config){
                $scope.showProgress=false;
                ngNotify.config({
                    theme: 'pure',
                    position: 'top',
                    duration: 3000,
                    type: 'info',
                    sticky: false,
                    button: true,
                    html: false
                });

                ngNotify.set('Evaluate Examination Completed Successfully');

                $scope.errorLists=data;
            }).error(function(data,status,headers,config){
                console.log(data);
                //$scope.showProgress=false;
            });

我也设定了有角度但没有用的时间。

 app.config(['$httpProvider', function($httpProvider) {
    $httpProvider.defaults.timeout = 10000000;
 }]);

我需要你的建议

2 个答案:

答案 0 :(得分:1)

短期修复是增加服务器的超时时间(这不是客户端/角度问题)。您说您正在使用LAMP,因此您必须将php.ini中的PHP max_execution_time属性配置为更大的值。您可能还需要在httpd.conf中配置Apache的超时。

长期修复,请求可以立即返回(即不是2分钟甚至15秒后)。这并不意味着工作已经完成,只是完成请求来完成工作。然后,您可以每X秒ping一次服务器以查看作业是否完整,然后将数据显示给用户。这似乎更多的工作,可能需要更多的时间,但我发现以这种方式开发和调试更容易,而不是单一的单一请求做了很多工作。除了提供更好的用户体验外:)

答案 1 :(得分:0)

有一些好的建议here

app.factory('timeoutHttpIntercept', function ($rootScope, $q) {
    return {
        'request': function(config) {
            config.timeout = 10000000;
            return config;
         }
    };
});

在你的配置中:

$httpProvider.interceptors.push('timeoutHttpIntercept');