我有一个包含getServiceData函数的AngularJS服务:
var DataService = (function () {
function DataService($log, $http, config) {
this.$log = $log;
this.$http = $http;
this.config = config;
}
DataService.prototype.getServiceData = function (fullUrl, qsData, rootNode) {
var _this = this;
if (qsData === null || typeof qsData === "undefined") {
qsData = null;
}
return this.$http.jsonp(fullUrl, { params: qsData }).then(function (response) {
var data = rootNode === null ? response.data : eval("response.data." + rootNode);
return data;
});
};
return DataService;
})();
返回JSON数据,但如果我传递rootNode参数,则在“then”代码中它始终为null。关于如何在“then”代码中访问rootNode参数的任何想法?
答案 0 :(得分:0)
eval
的范围在浏览器中不可靠,这就是问题所在。
JavaScript Closure - Eval() and capturing variables in Eval()'s scope
不建议使用eval
。在您的情况下,您应该使用括号表示法语法:
var data = rootNode === null ? response.data : response.data[rootNode];
答案 1 :(得分:0)
$http
回复承诺
然后(successCallback,errorCallback,notifyCallback) - 无论何时或将要解析或拒绝承诺,只要结果可用,就会异步调用其中一个成功或错误回调。使用单个参数调用回调:结果或拒绝原因。
then
函数取三个callback
函数而不是任何有价值的参数,并在你的ajax请求完成后调用它。因此,如果您想要访问then
中的任何变量或对象,则需要指定then
的外部范围,以便在评论中使用。
您应该使用angular eval method或@Khanh提到的方式而不是JavaScript eval
。