2015-05-09 3 views
0
var $ = require('jquery'), 
     Handlebars = require('handlebars'), 
     Backbone = require('backbone'), 
     mainJs = require('./main'); 


var services = { 



    authenticationservice: function(collections) { 
     var jsonreturn; 

     var api_token = mainJs.get_api_token(); 


     jsonreturn = collections.fetch({ 

     headers: {'Authorization': 'Bearer ' + api_token.access_token}, 
     success: function (collection, response, options) { 

      var responsejson = JSON.parse(response.responseText); 
      return responsejson; 

     }, 

     error: function (collection,response,options){ 

      var errorjson = JSON.parse(response.responseText); 
      //alert(errorjson.error_description); 
      return errorjson; 

     } 
    }); 

     return jsonreturn; 



    } 

}; 




module.exports = services; 

Как получить доступ к ответуText из jsonreturn, пожалуйста, помогите?Как получить ответ от ответа в макете?

+0

поведение 'collections.fetch' является асинхронным и ожидает обратных вызовов. В вашем случае вы уже зарегистрировали это с успехом и ошибкой. Но проблема связана с самой службой, поскольку она не принимает обратные вызовы, которые будут использоваться внутри успеха и ошибки. «Jsonreturn» не будет иметь значимой ценности. Вы должны изменить свой сервисный API. – CuriousMind

+0

В этом случае лучше будет поддерживать Backbone.sync? – vini

+0

Нет, я бы не рекомендовал этого. Это будет анти-шаблон. – CuriousMind

ответ

1

С collections.fetch является асинхронным поведением, вы должны вернуть jQuery отложенным в качестве вызова функции authenticationservice. См ниже код

authenticationservice : function(){ 
    var def = $.Deferred(); 
    ... 
    //Somewhere in success 
    success: function(...){ 
    def.resolve(responsejson); 
    } 
    ... 
    //Somewhere in error 
    error:function(...){ 
    def.reject(errorjson); 
    } 
    ... 
    return def; 
} 

Теперь место, откуда вы звоните эту услугу должны быть выровнены иметь дело с обещанием как ниже

service.authenticationservice().then(
    function(responsejson){ 
    //Do processing in case of success. 
    }, 
    function(errorjson){ 
    //Do processing in case of failure 
    } 
); 

Для получения более подробной информации о JQuery Deferred.