无法从我的javascript函数中获取值

时间:2013-11-25 12:22:41

标签: javascript jquery ajax angularjs

首先,我的代码如下。我的主要问题是,在调用之后或调用ajax之后,我无法在invokeConfigFile函数之外返回结果数据。

var invokeConfigFile = function() {
  return $http.get('json/config.json');
};

var data = {}

var getDataFromInvokedFile = function() {
  invokeConfigFile().then(function(result) {

    var current_env = result.data.current_environment,
        list_env = result.data.environments;

    angular.forEach(list_env, function(value, key) {
      // retrive the config on the current environment
      if(key === current_env) {

          data = value;
          return false; //let's stop if the condition are met
      }
    });
    console.log(data); // return data GOOD
    return data;


  }, function(result) {

    if(result.status == 404) {
      alert("Server config.js file not found.");
      return false;
    }
  });
  console.log(data); // return data EMPTY
};

var my_urls = getDataFromInvokedFile();

我在这里尝试完成的是在从ajax调用invokeConfigFile()获取结果数据之后,然后我将其存储到对象中。

像这样的东西

return {
 my_obj : getDataFromInvokedFile()
}

2 个答案:

答案 0 :(得分:2)

您无法从函数返回数据,因为AJAX调用是异步的。函数返回后响应到达。

使用回调来处理数据到达时:

function getDataFromInvokedFile(callback) {
  invokeConfigFile().then(function(result) {

    var current_env = result.data.current_environment,
        list_env = result.data.environments;

    angular.forEach(list_env, function(value, key) {
      // retrive the config on the current environment
      if(key === current_env) {

          data = value;
          return false; //let's stop if the condition are met
      }
    });
    callback(data);


  }, function(result) {

    if(result.status == 404) {
      alert("Server config.js file not found.");
      calback(false);
    }
  });
}

用法:

getDataFromInvokedFile(function(data){
  // here you have the data
});

答案 1 :(得分:0)

我做了一些更改,所以评论“点击这里”

var getDataFromInvokedFile = function() {
  invokeConfigFile().then(function(result) {

    var current_env = result.data.current_environment,
        list_env = result.data.environments;

    angular.forEach(list_env, function(value, key) {
      // retrive the config on the current environment
      if(key === current_env) {    
          data = value;
          return false; //let's stop if the condition are met
      }
    });
    console.log(data); // return data GOOD
    return data;   

  }, function(result) {

    if(result.status == 404) {
      alert("Server config.js file not found.");
      return false;

}           的console.log(数据); //点击这里

  });      
};