如何在XMLHttprequest之外更新范围变量

时间:2017-05-27 05:40:25

标签: javascript angularjs jszip

我正在尝试获取css文件的文件内容并尝试将其存储在我稍后将要使用的变量中。我正在使用XMLHttprequest来获取文件的内容。当我尝试将控制台置于其中时onreadystatechange输出完美无缺,但是当它在外面尝试相同的东西时,它在变量中显示空结果。我听说过$ apply和其他东西,但是有另一种方法可以实现这一点,我在哪里出错了?...提前致谢... 这是代码

    $scope.files={};
    var client = new XMLHttpRequest();
    client.open('GET', '/your_css/bootstrap.css');
    client.onreadystatechange = function() 
    {
      var bootstrap=client.responseText;
      css.file("bootstrap.css",bootstrap);
      $scope.$applyAsync(function(){
          $scope.files.bootstrap=bootstrap;
        })
     }
     client.send();

2 个答案:

答案 0 :(得分:1)

使用包裹AngularJS $http ServiceXHR API并与AngularJS框架集成:

$http.get('/your_css/bootstrap.css').then(function (response) {
    $scope.files.bootstrap = response.data;
});

答案 1 :(得分:0)

您刚才描述的行为的原因是onreadystatechange未执行,只是定义了。 client.send()正在发送提取文件的请求,onreadystatechange仅在响应(和文件)到达浏览器时执行。 “之后”onreadystatechange只是位置之后,但就时间而言。 onreadystatechangecallback。你希望你的asynchronous request同步行为,但这是一个坏主意和糟糕的设计。我建议你习惯于异步请求,因为在客户端等待请求完成是一个坏主意,如果有多个请求,它们会变得更糟,所有请求都是同步执行的。这会伤害到性能。