javascript - angularjs的http请求如何修改为同步的?
巴扎黑
巴扎黑 2017-04-10 14:21:44
0
8
724

RT,默认angularjs中的http请求为异步的,请问如何同步请求呢?

巴扎黑
巴扎黑

모든 응답(8)
巴扎黑

1.promise 2.异步请求成功后broadcast 3.如果希望数据加载完 才进入某个router 用resolve

Ty80

用原生xmlhttprequest.
同步的代价就是,在发送请求到服务器返回数据这段时间,你的网页将一直卡着,不能进行任何操作。楼主要想清楚。

小葫芦

使用Angular时无法将$http设置为同步。
因为Angular在JavaScript上构建了一套体系,你使用这套体系编程。换句话说,你使用Angular时,不应该考虑XMLHTTPRequest,同步,异步这些概念,你应该把它们暂时忘记。你使用Angular时就是在遵守Angular的规则。在这里就是$http的语法规则。

洪涛

同步没有道理,你哪怕用异步发送请求之后在网页上显示个等待中也比把网页卡住什么都做不了来得好……

PHPzhong

如果你需要同步加载数据,那么$http对你来说毫无意义. $http底层使用的是浏览器的XMLHTTPRequest对象,这个对象是实现AJAX调用的基础. 你应该再回顾一下AJAX是个神马东东

左手右手慢动作

人家说要同步。。虽说 $http不应是同步的.但他提供更低级的resouce?还是什么
有时也是有需求的,比如我这页面所有功能依赖于我将请求的东东,那么除了等待能干嘛呢
所以我干脆用同步,省的promise麻烦了

伊谢尔伦

赞成的答案@杨鑫诚Bruce

.state('', { 
        url : '/main',
        ncyBreadcrumb : {
             
        },
        params : {

        },
        resolve : {
            data : function($stateParams, $q) {
                var deferred = $q.defer();
                service.functionnnnnnn(params).then(function(result) {
                    
                    deferred.resolve(result.data);
                });
                
                return deferred.promise;
            }
        },
        views : {
            'main' : {
                controller : "",
                controllerAs : "vm",
                templateUrl : ,
            }
        }
    })

加载完再进入router

大家讲道理
var xhr = createXhr(method);
xhr.open(method, url, true);

//https://github.com/angular/angular.js/blob/master/src/ng/httpBackend.js 
//第61行



var xhr = new XMLHttpRequest();
xhr.open("GET", "test.txt", true);
xhr.onload = function (e) {
  if (xhr.readyState === 4) {
    if (xhr.status === 200) {
      console.log(xhr.responseText);
    } else {
      console.error(xhr.statusText);
    }
  }
};
xhr.onerror = function (e) {
  console.error(xhr.statusText);
};
xhr.send(null);

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿