我正在研究一个离子项目,并尝试从本地读取一个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'
]
});
答案 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的线索。