search

Home  >  Q&A  >  body text

javascript - angularjs的http请求如何修改为同步的?

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

巴扎黑巴扎黑2828 days ago720

reply all(8)I'll reply

  • 巴扎黑

    巴扎黑2017-04-10 14:23:44

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

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 14:23:44

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

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 14:23:44

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

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 14:23:44

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

    reply
    0
  • PHPz

    PHPz2017-04-10 14:23:44

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

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 14:23:44

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

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 14:23:44

    赞成的答案@杨鑫诚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

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-10 14:23:44

    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);
    
    

    reply
    0
  • Cancelreply