0

Я хочу прочитать URL из одного json-файла и указать URL-адрес в другой файл javascript с запросом $ http GET для выполнения этого URL-адреса. Я использую одну службу в другом файле службы для получения данных. Всякий раз, когда я запускаю его, он говорит undefined in URL: Недвижимость bannerslides функция.

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 
      }) 
     }); 
     } 
    }) 
})(); 

ответ

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 
    } 
+0

Это не работает, пожалуйста, смотрите в plnkr, код ошибки angular.js: 14324 TypeError: Не удается прочитать свойство 'then' of undefined http://plnkr.co/edit/qKO1ODM6YYHn1dmnfnbt?p=preview – Creator

+0

Oh. Я знаю, какая проблема. Вы пропускаете функцию обратного вызова. Позвольте мне уточнить свой ответ. – digit

+0

Ни один человек, его не работает, перейдите в код plunkr. Я упомянул выше, сделайте изменения в коде plunkr и проверьте, работает ли он – Creator

0

Можете ли вы привести пример на plunker/jsfiddle?

Вам не нужно использовать отложенный объект и службу $ q с помощью $ http.

В loggerService вы можете просто сделать

this.getPlayers = function() { 
    return $http.get('/config/config.json').then(function(data) { 
     return data; 
    }); 
} 

Кроме того, если вы хотите использовать то внутри siteController.js siteService.bannerSlides(). Затем вы должны сделать возврат внутри bannerSlides функции, поэтому он возвращает $ http/prom.

+0

https://plnkr.co/edit/qKO1ODM6YYHn1dmnfnbt?p=preview код Ошибка ** angular.js: 14324 TypeError: Не удается прочитать свойство «затем» неопределенных ** – Creator

-1

На Jquery простой HTTP GETjquery.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"); 
}); 
+0

вы пошли в неправильном направлении – Creator