如何从 AJAX 调用 (AngularJS) 中正确地 return 我的数据
How to correctly return my data from AJAX call (AngularJS)
我有一个调用下面这个函数的视图,该函数对我们的 API 进行 AJAX 调用 - 由于某些原因,当我查看时,这总是 returns 'undefined'这在使用 Firefox DOM 检查工具的 AngularScope 中。
如果我检查“网络”选项卡,我可以看到这个 URL 已被调用并且可以看到我期望的 JSON,然后我想要 return data.words JSON 数据,但这总是 returning 未定义?如果我删除 AJAX 调用并在最后一个 return 中留下 'static' 和 'words' ,这将按预期工作,所以我很清楚 returning 在 AJAX 成功调用中似乎不正确...有什么想法吗??
// 在 AngularJS 服务文件中
this.getAccSignoffWords = function() {
var url = ApiService.getDomain() + 'account/signoff';
$http({
method : 'GET',
url : url
}).success(function(data) {
if (data.success) {
return data.words; // I want to return this JSON to the scope
}
}).error(function(data) {
throw "Failed to get sign-off words";
})['finally'](function(data) {
});
// return [ 'static', 'words' ]; // this line is commented out and only used for testing and is an example of the type of data expected from data.words
}
那是因为你的 ajax 没有 return 任何东西.. 如果你想将它分配给你应该做的范围:
var self = this;
var url = ApiService.getDomain() + 'account/signoff';
$http({
method : 'GET',
url : url
}).success(function(data) {
if (data.success) {
self.getAccSignoffWords = data.words; // I want to return this JSON to the scope
}
}).error(function(data) {
throw "Failed to get sign-off words";
})['finally'](function(data) {
});
我认为你不会返回 $http result.Could 你请尝试下面的代码。
this.getAccSignoffWords = function() {
var url = ApiService.getDomain() + 'account/signoff';
return $http({
method : 'GET',
url : url
}).success(function(data) {
if (data.success) {
return data.words; // I want to return this JSON to the scope
}
}).error(function(data) {
throw "Failed to get sign-off words";
})['finally'](function(data) {
});
// return [ 'static', 'words' ]; // this line is commented out and only used for testing and is an example of the type of data expected from data.words
}
当您发送 http 请求时,需要一些时间来处理并将数据发送回您的 javascript 代码。但由于 javascript 是异步的,它不会等到响应 return。所以你可以 return 像 Umakanta Behera 建议的整个 http 请求,或者你可以使用回调函数来等待响应返回。
this.getAccSignoffWords = function(callback) {
var url = ApiService.getDomain() + 'account/signoff';
$http({
method : 'GET',
url : url
}).success(function(data) {
if (data.success) {
callback() data.words
}
}).error(function(data) {
throw "Failed to get sign-off words";
})['finally'](function(data) {
});
}
像这样调用这个函数
this.getAccSignoffWords(function(data){
console.log(data) // your http response
})
我有一个调用下面这个函数的视图,该函数对我们的 API 进行 AJAX 调用 - 由于某些原因,当我查看时,这总是 returns 'undefined'这在使用 Firefox DOM 检查工具的 AngularScope 中。
如果我检查“网络”选项卡,我可以看到这个 URL 已被调用并且可以看到我期望的 JSON,然后我想要 return data.words JSON 数据,但这总是 returning 未定义?如果我删除 AJAX 调用并在最后一个 return 中留下 'static' 和 'words' ,这将按预期工作,所以我很清楚 returning 在 AJAX 成功调用中似乎不正确...有什么想法吗??
// 在 AngularJS 服务文件中
this.getAccSignoffWords = function() {
var url = ApiService.getDomain() + 'account/signoff';
$http({
method : 'GET',
url : url
}).success(function(data) {
if (data.success) {
return data.words; // I want to return this JSON to the scope
}
}).error(function(data) {
throw "Failed to get sign-off words";
})['finally'](function(data) {
});
// return [ 'static', 'words' ]; // this line is commented out and only used for testing and is an example of the type of data expected from data.words
}
那是因为你的 ajax 没有 return 任何东西.. 如果你想将它分配给你应该做的范围:
var self = this;
var url = ApiService.getDomain() + 'account/signoff';
$http({
method : 'GET',
url : url
}).success(function(data) {
if (data.success) {
self.getAccSignoffWords = data.words; // I want to return this JSON to the scope
}
}).error(function(data) {
throw "Failed to get sign-off words";
})['finally'](function(data) {
});
我认为你不会返回 $http result.Could 你请尝试下面的代码。
this.getAccSignoffWords = function() {
var url = ApiService.getDomain() + 'account/signoff';
return $http({
method : 'GET',
url : url
}).success(function(data) {
if (data.success) {
return data.words; // I want to return this JSON to the scope
}
}).error(function(data) {
throw "Failed to get sign-off words";
})['finally'](function(data) {
});
// return [ 'static', 'words' ]; // this line is commented out and only used for testing and is an example of the type of data expected from data.words
}
当您发送 http 请求时,需要一些时间来处理并将数据发送回您的 javascript 代码。但由于 javascript 是异步的,它不会等到响应 return。所以你可以 return 像 Umakanta Behera 建议的整个 http 请求,或者你可以使用回调函数来等待响应返回。
this.getAccSignoffWords = function(callback) {
var url = ApiService.getDomain() + 'account/signoff';
$http({
method : 'GET',
url : url
}).success(function(data) {
if (data.success) {
callback() data.words
}
}).error(function(data) {
throw "Failed to get sign-off words";
})['finally'](function(data) {
});
}
像这样调用这个函数
this.getAccSignoffWords(function(data){
console.log(data) // your http response
})