我想从一个json文件中读取URL并将URL提供给具有$ http GET请求的其他javascript文件以执行该URL。我在另一个服务文件中使用一个服务来获取数据。每当我运行它时,它会在 bannerslides 函数的 url:属性中显示 undefined 。
common.js:
(function() {
angular.module('siteModule')
.service('loggerService', function($http, $q) {
var deffered = $q.defer();
$http.get('/config/config.json').then(function(data) {
deffered.resolve(data);
});
this.getPlayers = function() {
return deffered.promise;
}
})
})();
siteService.js:
(function() {
var confUrl;
angular.module('siteModule')
.service('siteService', function($http, $q, loggerService) {
this.bannerSlides = function() {
loggerService.getPlayers().then(function(data) {
confUrl = data.data.baseUrl + data.data.urls.site;
console.log("GOTURL", confUrl);
//move your return statement here
return $http({
method: "GET",
dataType: "json",
url: confUrl
})
});
}
})
})();
答案 0 :(得分:1)
此错误表示siteService.bannerSlides未被识别为承诺。当我查看您的代码时,您只需返回实际值。那么你需要的是siteService.bannerSlides中的回调。
Error code is angular.js:14324 TypeError: Cannot read property 'then' of undefined
<强> siteController.js 强>
// modify this to accept callback instead of using then
siteService.bannerSlides(function (data) {
console.log(data);
})
<强> siteService.js 强>
this.bannerSlides = function(callback) {
loggerService.getPlayers().then(function(data) {
confUrl = data.data.baseUrl + data.data.urls.site;
console.log("GOTURL", confUrl);
//move your return statement here
$http({
method: "GET",
dataType: "json",
url: confUrl
}).then(function (response) {
// inspect/modify the received data and pass it onward
//console.log("MAke url", confUrl);
// add this
return callback(response.data);
}, function (error) {
// inspect/modify the data and throw a new error or return data
throw error;
});
}); //loggerService
}
答案 1 :(得分:0)
你能举一个关于plunker / jsfiddle的例子吗?
您不必使用带有$ http的延迟对象和$ q服务。
在loggerService中你可以做到
this.getPlayers = function() {
return $http.get('/config/config.json').then(function(data) {
return data;
});
}
另外,如果你想在siteController.js中使用 的 siteService.bannerSlides()。然后强> 你应该在bannerSlides函数中做一个返回,所以它返回$ http / promise。
答案 2 :(得分:-1)
在Jquery简单的http GET
jquery.getjson
$.getJSON( "ajax/test.json", function( data ) {
var items = [];
$.each( data, function( key, val ) {
items.push( "<li id='" + key + "'>" + val + "</li>" );
});
$( "<ul/>", {
"class": "my-new-list",
html: items.join( "" )
}).appendTo( "body" );
});