在http请求

时间:2017-12-10 14:28:38

标签: html angularjs http

我有一个div,它应该显示3个不同的span个不同的消息:一个用于成功,一个用于加载,一个用于失败。我这样处理过:

<div class="notifbar">
    <span ng-if="sendingACode == true" class="notif-text">
        sending...wait
    </span>
    <span ng-if="sendingACode == false && sendingSuccessState == 1" class="notif-text">
        successfully sent
    </span>
    <span ng-if="sendingACode == false && sendingSuccessState == 0" class="notif-text mutualAnimationIf">
        failed to send
    </span>
</div>

这个想法很清楚。当sendingAcode == true时,你正在发送。 Hance,加载范围必须是可见的。当sendingAcode == false时,您完成了发送请求并且您成功与否。

我希望如此:您点击负责按钮 - &gt; loadins msg显示 - >您的请求以成功或失败状态结束 - &gt;失败/成功msg显示并加载msg被隐藏 - &gt; 3秒传递 - &gt;所有信息都是不可见的

以下是发生的事情:您点击按钮 - &gt;显示加载消息 - >请求结束,我可以看到我的数据库更新 - > 10秒或更长时间传递 - >成功/ failed msg显示并且加载msg被隐藏。或者没有任何事情发生,如果你在上一次尝试时取得了成功。 :|

有一个处理发送请求的功能,现在是:

$scope.sendMyReq = function () {
    $scope.sendingACode=true;//we are in loading state
    $scope.sentFaultCode=code;//data to be sent

    $http.post(UrlConstantsServer.deviceLogsUrl , code)
        .then(function mySuccess(response) {
                console.log("succeed");
                console.log("sending? " + $scope.sendingACode);
                $scope.sendingSuccessState = 1;//show success
                $scope.sendingACode = false;//do not show loading
                console.log("success? " + $scope.sendingSuccessState);

                $timeout (function (){
                    console.log("here in timeout")
                    $scope.sendingACode = false;//no need to show loading msg anymore
                    $scope.sendingSuccessState = -1;//no need to show success/fail msg anymore
                }, 3000)
            }
            , function myFail(response){
                console.log(response) ;
                console.log("unable to send!");
                $scope.sendingSuccessState = 0;//show fail
                $scope.sendingACode = false;//do not show loading

                $timeout (function (){
                    console.log("here in timeout")
                    $scope.sendingACode = false;//no need to show loading msg anymore
                    $scope.sendingSuccessState = -1;//no need to show success or fail msg anymore
                }, 3000)

            });
}

所以基本上问题是: Timeout的工作速度慢于3秒,即使它已启动,它设置的值也不会在视图中显示效果。

我尝试了什么:

  • 在控制台中打印我的变量值以在myScuccess and myFail内检查它们:它们显示正确的值。
  • 在请求结束后在检查页面的评估中评估它们:没有可靠的答案。有时没有更新,有时每个人都会更新,有时一个更新,另一个不更新。 :|
  • 更改内部和外部超时的每个人的值:外部超时 什么都没发生。内部超时工作,但比所需的速度慢。
  • $scope.$digest();mySuccess()末尾使用myFail: 错误:$ digest已在进行中。

任何形式的帮助都将受到赞赏。

0 个答案:

没有答案