在http get ionic中获取null响应

时间:2014-12-16 22:16:40

标签: angularjs ionic

我正在使用ionic和angularjs开发移动应用程序。每件事情都很好,但我不知道为什么当我试图发出一个http get请求时,调用失败的mathod并且数据为空且状态为0.我做错了什么?这是我的app.js

angular.module('starter', ['ionic'])//, 'starter.controllers'])
    .run(function($ionicPlatform) {

      $ionicPlatform.ready(function() {
        // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
        // for form inputs)
      if(window.cordova && window.cordova.plugins.Keyboard) {
        cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
      }
      if(window.StatusBar) {
        StatusBar.styleDefault();
      }
    });
    })

    .config(function($stateProvider, $urlRouterProvider) {
      $stateProvider

      .state('login_page', {
        url: '/login_page',
        templateUrl: 'templates/login_page.html',
        controller: 'LoginPageCtrl'
      })
      $urlRouterProvider.otherwise('/login_page');
    })

    .controller('LoginPageCtrl', function($scope , $http) {
      $http.get('http://91.109.23.124:3000/api/v1/discounts.json').success(function(data, status, headers, config) {
        console.log('success');
      })
      .error(function(data, status) {
        console.log('error');
      })  ;
    })

5 个答案:

答案 0 :(得分:3)

0是一个模糊的状态代码,可能意味着很多事情。有关详细信息,请参阅此答案https://stackoverflow.com/a/26451773/1487831

所以我用你的代码http://plnkr.co/edit/2OWOxuI7kjEzcbOzp9lZ?p=preview

创建了一个plunker

<强>的script.js

// Code goes here

angular.module('starter', []) //, 'starter.controllers'



.controller('LoginPageCtrl', function($scope, $http) {
  $scope.status = '';
  $scope.data = '';
  $scope.headers = '';
  $scope.config = '';
  $scope.showResponse = false;

  $http.get('http://91.109.23.124:3000/api/v1/discounts.json').success(function(data, status, headers, config) {
          $scope.showResponse = true;
      $scope.data = data;
      $scope.status = status;
      $scope.headers = headers;
      $scope.config = config;
  })
    .error(function(data, status,headers,config) {
      $scope.showResponse = true;
      $scope.data = data;
      $scope.status = status;
      $scope.headers = headers;
      $scope.config = config;
    });
})

<强>的index.html

<!DOCTYPE html>
<html ng-app="starter">

<head>
  <script data-require="angular.js@1.3.6" data-semver="1.3.6" src="https://code.angularjs.org/1.3.6/angular.js"></script>
  <link rel="stylesheet" href="style.css" />
  <script src="script.js"></script>
</head>

<body ng-controller="LoginPageCtrl">
  <div ng-if="!showResponse">
    <span>Requesting...</span>
  </div>
  <div ng-if="showResponse">
    <span>Request finished with </span>
    <span>status {{status}}</span> 
    <br/>

    <span>Url : {{config.url}}</span> 
    <br/>
    <span>method : {{config.method}}</span> 
    <br/>
    <span>Request : {{config.transformRequest}}</span> 
    <br/>
    <span>Response : {{config.transformResponse}}</span> 
    <br/>

    <span>Header : {{config.headers}}</span> 
    <br/>
  </div>
</body>

</html>

看起来你有CORS问题。

如果您在服务器端有控制权。将Access-Control-Allow-Origin包含在响应头中,你应该好好去。

答案 1 :(得分:0)

对我来说,这是一个CORS问题。在Sails.js中我必须设置origin:'*'和headers:'content-type,X-Bearer-Token'

答案 2 :(得分:0)

对我来说,这是白名单问题。有关白名单网址,请参阅cordova插件

https://github.com/apache/cordova-plugin-whitelist

截至Cordova 4.0,cordova已收紧其白名单政策。

答案 3 :(得分:0)

我遇到了这个问题,对我来说这是一个iOS9 App Transport Security问题。我暂时只在app.plist中设置NSAllowAribitrayLoads,以便在后端等待App Transport Security规范时继续开发。

答案 4 :(得分:0)

这是一个CORS问题,但除了Access-Control-Allow-Origin之外,还必须允许HTTP方法(至少在express个应用中) `接入控制允许的方法

PATCHstatus 0正在工作时正在返回GET, POST, PUT, OPTIONS

这是我处理CORS的快速中间件:

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Methods", "POST, GET, OPTIONS,\
    PATCH, PUT, DELETE");
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, \
    Content-Type, Accept, Authorization");
  next();
});