如何从 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 
})