标签: angularjs-http

使用AngularJS,我不想设置全局$ http.defaults.headers.common.我可以在每次$ resource调用时发送自定义标头吗?

我正在调用一个我无法控制的后端服务器.目前它正在使用这样的jQuery ajax:

return $.ajax({
    type: "POST",
    url: "/api/cases/store",
    contentType: "application/json",
    data: JSON.stringify(parameters),
    headers: { "Authorization": cred } : {}
}) // ... etc.
Run Code Online (Sandbox Code Playgroud)

我想将它转换为使用该$resource服务,并让它工作这样做

$http.defaults.headers.common['Authorization'] = cred;
return $resource('/api/cases/store').save();
Run Code Online (Sandbox Code Playgroud)

唯一的问题是我必须$http使用auth凭据设置全局服务默认值.

我看到你应该能够通过$http调用传递自定义标头,现在通过$resource调用,但我找不到任何关于如何在我的情况下执行它的示例(使用POST).

我在AngularJS文档中也找不到任何相关内容.你们怎么想出这个东西?文档非常糟糕!

javascript http-post angularjs angularjs-resource angularjs-http

4
推荐指数
1
解决办法
2168
查看次数

AngularJS $http 在多个控制器中使用响应

我有一个应用程序,我在其中加载一堆专辑,然后当用户单击每个专辑时,他们会获得专辑的详细信息,例如歌曲等。现在我正在从数据库中提取数据,但做了两次, 一次在 ProjectsCtrl 中显示所有专辑,然后在 ProjectsDetailCtrl 中再次显示单个专辑信息。我觉得有一种更快的方法可以做到这一点,但无法弄清楚如何从第一次保存数据以再次在第二个控制器中使用

(function() {
    var app = angular.module('chp', ['ngRoute', 'projectControllers']);

    app.config(['$routeProvider',
      function($routeProvider) {
        $routeProvider.
          when('/', {
            templateUrl: 'partials/directory.html',
            controller: 'ProjectsCtrl'
          }).
          when('/album/:slug', {
            templateUrl: 'partials/album.html',
            controller: 'ProjectDetailCtrl'
          }).
          otherwise({
            redirectTo: '/'
          });
      }]);

    var projectControllers = angular.module('projectControllers', []);

    projectControllers.controller('ProjectsCtrl', ['$scope', '$http',
      function ($scope, $http) {
        $http.get('/get_albums').success(function(albums) {
            $scope.projects = albums;
            $scope.filters = { };
        });
      }]);



    projectControllers.controller('ProjectDetailCtrl', ['$scope', '$http', '$routeParams', '$sce',
      function($scope, $http, $routeParams, $sce) {


        $http.get('/get_albums').success(function(albums) {
            $scope.projects = albums;

            for(var i = 0; i …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-controller angularjs-http

4
推荐指数
1
解决办法
847
查看次数

如何跳过HTTP请求的angularjs拦截器?

我有一个angularjs应用程序,其中我有一个拦截器,它将授权令牌添加到每个请求的标头中.

但是,我需要使用的应用程序中的某个地方以及拦截器对其进行破坏的外部API,因为它添加了此外部API提供程序无法接受的此授​​权标头.我怎样才能使angularjs HTTP跳过拦截器,只针对这一个具体情况?

拦截器代码如下:

app.factory('authInterceptorService', ['$q', '$injector', '$location', 'localStorageService', function ($q, $injector, $location, localStorageService) {
    var authInterceptorServiceFactory = {};
    var $http;

    var _request = function (config) {

        config.headers = config.headers || {};

        var authData = localStorageService.get('authorizationData');
        if (authData) {
            //console.log("token: " + authData.token.substring(0, 10));
            //console.log("user: " + authData.userName);
            config.headers.Authorization = 'Bearer ' + authData.token;
        }
        return config;
    }

    var _responseError = function (rejection) {
        var deferred = $q.defer();
        if (rejection.status === 401) {
            var authService = $injector.get('authService');
            authService.refreshToken().then(function (response) { …
Run Code Online (Sandbox Code Playgroud)

interceptor angularjs angularjs-http

4
推荐指数
3
解决办法
5856
查看次数

AngularJS 中的 $http 错误处理

我的 AngularJS 项目中的 $http 无法识别 iOS 上的 40X(401,403,405...) 错误。我使用的是 1.2.10 AngularJS 版本和 Cordova 3.4.0 版本。

下面是我正在使用的代码:

TE_SERVICES.factory('hello',function ($http,$rootScope) {
return {
loginUser: function(userCredentials,successCallback,errorCallback){
          $http({
               method: "GET",
               url: "data/example.json",
               headers: {"Authorization":'Basic '+userCredentials},
             }).then(function(response){
                                successCallback(response.data);
                                console.log("Success------"+JSON.stringify(response))
             },function(data, status, headers, config){
                                errorCallback(data);
                                console.log("Error------"+JSON.stringify(data)+" "+status)
             })

        }
    }
 });

hello.loginUser($rootScope.encodedUserCredencials,function(persons) {
                // success handler
            }, function(data) {
                // error handler
                console.log(data.status+"===="+status)
                });
Run Code Online (Sandbox Code Playgroud)

data.status返回 0,状态返回未定义。请帮我解决这个问题。

试图将域包含在 IOS 的白名单中。但没有解决方案:( 它仍然给出相同的响应。

但是相同的代码在 Android 中运行得非常好。请帮我解决这个问题。

提前致谢 :)

ios angularjs cordova-3 angularjs-http

3
推荐指数
1
解决办法
2万
查看次数

使用 Angular 提供程序构建 OData $filter URL

我有一个用于查询 OData 服务的角度提供程序。

现在我正在尝试在该提供程序上构建 $filter 函数,以便我可以在整个应用程序中使用它。

我遇到的问题,到目前为止还没有解决,是 URL 的查询部分需要以 '$filter=' 开头,当有一个过滤器但有多个过滤器时,我可以很好地处理添加为“和{查询在这里}”。

示例查询将是:

http://www.example.com/odata/Restaurants/?$filter=id eq 2 and city eq 'Los Angeles' and substringof("Lagasse", chef)&$top=20
Run Code Online (Sandbox Code Playgroud)

我将数组中的所有过滤器发送给提供者。理想情况下,我会使用 "$filter=#{firstFilter}" 作为数组中的第一个过滤器,其余的过滤器使用 " 和 #{remainingFilter}" 但我不确定如何构建此代码。

我当前的代码使用多个 if 语句来检查过滤器是否存在,但由于构建 url 的性质,它始终强制使用过滤器之一。我想避免这种情况。

例如:

var filter = "$filter=id eq 2";
if (city) {
  filter += " and city eq #{cityName}";
}
if (chef) {
  filter += " and substringof(#{chefName}, chef)";
}
Run Code Online (Sandbox Code Playgroud)

现在每次用户输入查询时,他们都必须指定一个 id。

我们没有使用 BreezeJS、JayData 或任何其他库。严格来说是 AngularJS,特别是 $http,而不是 $resource。

javascript arrays odata angularjs angularjs-http

3
推荐指数
1
解决办法
9983
查看次数

AngularJS:将$ http.get数据分配给变量

我尝试将$ http.get中的数据分配给我的控制器中的变量.

 $http.get(URL).success(function (data) {
      $scope.results = data;
      console.log('results in $http.get :'+ $scope.results);
    });

 console.log('results after http.get'+ $scope.results);
Run Code Online (Sandbox Code Playgroud)

第一个控制台日志打印数据来自get.在$ http.get(url).success $ scope.results打印为undefined之后.

javascript angularjs angularjs-scope angularjs-controller angularjs-http

3
推荐指数
1
解决办法
7206
查看次数

AngularJS中$ http.put和$ http({method:'PUT'})之间的区别

我必须将一些json数据'PUT'发送到服务器.以下代码抛出错误

$rootScope.request.data = {"name": "John", "surname":"Doe"}
var uri = //some REST API
var action = $http({
    method: 'PUT',
    url: uri,
    data: $rootScope.request.data
});
Run Code Online (Sandbox Code Playgroud)

抛出的错误是:

找不到资源的流:资源{displayName ='null',uri ='/ signup'}(org.mule.module.apikit.exception.ApikitRuntimeException).消息有效内容的类型为:NullPayload

但是,当我这样做时,它的工作原理

$rootScope.request.data = {"name": "John", "surname":"Doe"}
var uri = //some REST API
var action = $http.put(uri, $rootScope.request.data);
Run Code Online (Sandbox Code Playgroud)

然后将'action'推入一个数组中,并使用$ q.all触发请求.成功和错误在$ q中处理

想知道他们之间有什么区别?我的第一次请求中是否遗漏了一些内容?

http http-put angularjs angularjs-http

3
推荐指数
1
解决办法
4347
查看次数

为什么使用Angular Service来收集信息,而不仅仅是$ http?

两个选项,哪个更好,为什么:

例A.

  1. 应用模块
  2. 包含模型数据的服务
  3. 控制器从服务中调用数据

文件1 Users.js::

      angular.module('users', []);
Run Code Online (Sandbox Code Playgroud)

文件2 userService.js::

angular.module('users').service('userService', ['$q', UserService]);

  function UserService($q) {
    var users = [
      {
        name: 'Bob Smith',
        age: 26,
        address: 'London',
      },
      {
        name: 'John Simpson',
        age: 41,
        address: 'New York',
      },
      {
        name: 'Maria West',
        age: 36,
        address: 'Chicago',
      }
    ];

    // Promise-based API
    return {
      loadAllUsers : function() {
        // Simulate async nature of real remote calls
        return $q.when(users);
      }
    };
  }

})();
Run Code Online (Sandbox Code Playgroud)

文件3 UserController.js::

          angular.module('users').controller('UserController', ['$scope', …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs angularjs-service angularjs-http

3
推荐指数
1
解决办法
184
查看次数

二进制文件已损坏 - 如何使用AngularJS下载二进制文件

使用带有角度的ResponseEntity下载任何文件都不起作用

我需要在客户端使用angular下载文件,这个文件可以是任何格式,它可以是pdf或excel或图像或​​txt ...我的方法只适用于txt文件,并给我一个excel和图像的失败格式和对于pdf,它给出了一个空的pdf.

所以在我的控制器中这里是调用服务方法的函数:

    vm.downloadFile = downloadFile;

    function downloadFile(file){
        var urlDir = "C://STCI//"+idpeticion;
        return VerDocServices.downloadFile(file,urlDir)
          .then(function(response) {
            var data = response.data;
            var filename = file;
            var contentType = 'application/octet-stream';//octet-stream             
            var linkElement = document.createElement('a');
            try {
                var blob = new Blob([ data ], {
                    type : contentType
                });
                var url = window.URL.createObjectURL(blob);
                linkElement.setAttribute('href', url);
                linkElement.setAttribute("download", filename);
                var clickEvent = new MouseEvent("click", {
                    "view" : window,
                    "bubbles" : true,
                    "cancelable" : false
                });
                linkElement.dispatchEvent(clickEvent);
            } catch (ex) {
                console.log(ex);
                throw ex;
            } …
Run Code Online (Sandbox Code Playgroud)

download angularjs angularjs-http

3
推荐指数
1
解决办法
2081
查看次数

AngularJS 使用 FormData API 上传多个文件

我需要使用 Laravel 5.1 作为后端在 Angular 应用程序中将图像和视频文件上传到服务器。所有的 Ajax 请求都需要首先到达 Laravel 控制器,我们在那里有关于文件到达时如何处理的代码。我们之前已经做了普通的 HTML 表单来提交文件上传到控制器,但是在这种情况下我们需要避免表单的页面刷新,所以我通过 Angular 在 Ajax 中尝试这样做。

我需要使用 Ajax 将哪些信息发送到 Laravel 控制器,而这些信息以前是通过 HTML 表单发送到控制器的?

这是 Laravel 控制器中的代码,一旦文件信息到达那里,它就会处理文件信息。这就是我需要弄清楚如何发送的,所以我希望可以重用这段代码:

    $promotion = Promotion::find($id);
    if (Input::hasFile('img_path')){
        $path             = public_path().'/images/promotion/'.$id.'/';
        $file_path        = $path.'promotion.png';
        $delete           = File::delete($file_path);
        $file             = Input::file('img_path');
        $uploadSuccess    = $file->move($path, 'promotion.png');
        $promotion->img_path = '/images/promotion/'.$id.'/promotion.png';
    }
    if (Input::hasFile('video_path')){
        $path             = public_path().'/video/promotion/'.$id.'/';
        $file_path        = $path.'promotion.mp4';
        $delete           = File::delete($file_path);
        $file             = Input::file('video_path');
        $uploadSuccess    = $file->move($path, 'promotion.mp4');
        $promotion->video_path = '/video/promotion/'.$id.'/promotion.mp4';
    }
Run Code Online (Sandbox Code Playgroud)

正如您在上面看到的,我们正在将我们得到的任何文件转换为 PNG,文件名为 Promotion.png,因此很容易获取,而且我们只接受 .mp4 视频格式。因此,我们无需担心检查文件是否存在以及是否可以覆盖它。这就是为什么您可以在代码中看到我们在保存之前删除了该名称的任何现有文件。

HTML 只是一个输入类型为“文件: …

php angularjs angularjs-http laravel-5 angularjs-fileupload

3
推荐指数
1
解决办法
6751
查看次数