RT,默认angularjs中的http请求为异步的,请问如何同步请求呢?
1.promise 2.异步请求成功后broadcast 3.如果希望数据加载完 才进入某个router 用resolve
用原生xmlhttprequest. 同步的代价就是,在发送请求到服务器返回数据这段时间,你的网页将一直卡着,不能进行任何操作。楼主要想清楚。
使用Angular时无法将$http设置为同步。 因为Angular在JavaScript上构建了一套体系,你使用这套体系编程。换句话说,你使用Angular时,不应该考虑XMLHTTPRequest,同步,异步这些概念,你应该把它们暂时忘记。你使用Angular时就是在遵守Angular的规则。在这里就是$http的语法规则。
同步没有道理,你哪怕用异步发送请求之后在网页上显示个等待中也比把网页卡住什么都做不了来得好……
如果你需要同步加载数据,那么$http对你来说毫无意义. $http底层使用的是浏览器的XMLHTTPRequest对象,这个对象是实现AJAX调用的基础. 你应该再回顾一下AJAX是个神马东东
$http
XMLHTTPRequest
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);
1.promise 2.异步请求成功后broadcast 3.如果希望数据加载完 才进入某个router 用resolve
用原生xmlhttprequest.
同步的代价就是,在发送请求到服务器返回数据这段时间,你的网页将一直卡着,不能进行任何操作。楼主要想清楚。
使用Angular时无法将$http设置为同步。
因为Angular在JavaScript上构建了一套体系,你使用这套体系编程。换句话说,你使用Angular时,不应该考虑XMLHTTPRequest,同步,异步这些概念,你应该把它们暂时忘记。你使用Angular时就是在遵守Angular的规则。在这里就是$http的语法规则。
同步没有道理,你哪怕用异步发送请求之后在网页上显示个等待中也比把网页卡住什么都做不了来得好……
如果你需要同步加载数据,那么
$http
对你来说毫无意义.$http
底层使用的是浏览器的XMLHTTPRequest
对象,这个对象是实现AJAX
调用的基础. 你应该再回顾一下AJAX
是个神马东东人家说要同步。。虽说 $http不应是同步的.但他提供更低级的resouce?还是什么
有时也是有需求的,比如我这页面所有功能依赖于我将请求的东东,那么除了等待能干嘛呢
所以我干脆用同步,省的promise麻烦了
赞成的答案@杨鑫诚Bruce
加载完再进入router