Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在angularjs中进行ajax调用后更新变量_Ajax_Angularjs - Fatal编程技术网

在angularjs中进行ajax调用后更新变量

在angularjs中进行ajax调用后更新变量,ajax,angularjs,Ajax,Angularjs,我使用factory在angularjs中进行数据库调用 var app = angular.module('myApp', []); app.factory("Service", function ($http) { var obj = {}; $http.get('test.txt').then(function (data) { obj.getApiKey = {'Authorization' : data.data}; }); return obj; }); ap

我使用factory在angularjs中进行数据库调用

var app = angular.module('myApp', []);
app.factory("Service", function ($http) {
  var obj = {};
  $http.get('test.txt').then(function (data) {
    obj.getApiKey = {'Authorization' : data.data};
  });
  return obj;
});
app.factory("Orders", function ($http, Service) {
  var obj = {};
  var api_key = Service.getApiKey;
  console.log(api_key);
  return obj;
});
在上面的程序中,当我调用服务工厂的属性并记录api_key=Service.getApiKey的值时;它显示未定义的。可能是因为没有从$http调用接收数据。如何同步执行AJAX调用。

如所述,不使用AJAX的同步调用不是最佳做法,相反,您可以将promisse作为函数返回,稍后再使用:

var app = angular.module('myApp', []);
app.factory("Service", function ($http) {
  var obj = {};
  obj.getApiKey = $http.get('test.txt').then(function (data) {
    return {'Authorization' : data.data};
  });
  return obj;
});

app.factory("Orders", function ($http, Service) {
  var obj = {};

  obj.getApiKey = Service.getApiKey.then(function(data){
      console.log(data);
      return data;
  });

  return obj;
});

在这种情况下,服务将返回promisse对象,这样您可以确保成功调用值,并且调用后数据可用。

从服务返回承诺:

var app = angular.module('myApp', []);
app.factory("Service", function ($http) {
  var obj = {};
  factory.get=function(success,error){
   $http.get('test.txt').then(function (data) {
     obj.getApiKey = {'Authorization' : data.data};
   });
  return obj;
  }
});
app.factory("Orders", function ($http, Service) {
  Service.get(suc,err);
  var suc=function()
  {
     var obj = {};
  var api_key = Service.getApiKey;
  console.log(api_key);
  return obj;
  }


});
app.factory("Service", function ($http) {
   return {
       getApiKey: function() {
           return $http.get('test.txt');
       }
   };
});
注入服务,并使用Promise API异步获取数据:

app.factory("Orders", function ($http, Service) {
   var obj = {};
   var api_key = {};

   Service.getApiKey().then(function(apiKey) {
        api_key = apiKey.data;
   });
});

不要进行同步调用。他们从阴间释放肮脏的生物。相反,在ajax调用成功完成后,使用回调来执行代码。我无法使用promise。因为orders是一个工厂,在这个工厂中,我需要其他方法来使用这个api密钥。所有这些方法最终都返回obj