从离子承诺

时间:2016-02-11 12:54:41

标签: javascript angularjs json rest ionic-framework

我正在研究一个离子项目,并尝试从本地读取一个JSON文件,通过服务发送的一个承诺,最后注入一个控制器。但是,我收到错误 SyntaxError:Unexpected token J ,其中 J 始终是我的JSON文件中的第一个字符。

任何人都有想法?非常感谢!!!

我在 app.js

中有一条路线
.config(function($stateProvider, $urlRouterProvider) {

  $stateProvider
  .state('home', {
     url: '/',
     templateUrl: 'templates/home.html',
     controller: 'MainCtrl as vm',
     resolve: {
        weather: function(MyService) {
           return MyService.getData();
     }
  });

  $urlRouterProvider.otherwise('/');
});

我的 services.js 就在这里

.factory('MyService', function($http) {

   var base_url = "http://localhost:8100/";

   function getData() {
       return $http.get(base_url+'data/pt_br/mydata.json?callback=JSON_CALLBACK')
          .then(
             function(res) {
                return res;
             },
             function(err) {
                return err;
             }
          )
   }

   return { getData: getData() }
});

这是我的控制器

.controller('MainCtrl', function(weather) {

   var vm = this;
   vm.weather = weather;
});

最后,我的json文件:

JSON_CALLBACK ({
    'Introduction': 'Welcome to my site!',
    'texts' : [
        'text1': 'hello',
        'text2': 'world'
    ]
});

2 个答案:

答案 0 :(得分:0)

我认为您最需要使用JSONP,因为当它返回时,它实际上将函数名称作为响应的第一部分。

您的代码中需要的更改是:

 return $http.jsonp(base_url+'data/pt_br/mydata.json?callback=JSON_CALLBACK')

了解jsonp,以便了解JSONP的内容。这是一个fiddle,向您展示如何使用jsonp。

如果您结帐网络电话,您会看到Angular将JSON_CALLBACK与其设置的内容进行交换,因此您可能无法尝试模拟它。

angular.callbacks._1({"data": "{\"foo\":\"bar\"}"});

答案 1 :(得分:0)

我解决了这个问题。我发现我的json文件像text-plain一样发送。我在json验证器https://jsonformatter.curiousconcept.com/中传递了我的json文件,然后,我意识到 ALL STRINGS 应该用双引号括起来,而不仅仅是值。感谢@Rajesh的线索。