如何在AngularJs中进行嵌套的http查询?

时间:2013-10-29 10:18:04

标签: ajax facebook http angularjs

我在AngularJs中构建单页应用程序,我需要调用Facebook UI对话框。如果用户单击“确定”或“取消”,则successReport方法不会立即调用。此方法在我点击页面中的任何按钮后调用,或link。类似于内部队列

 service.showStreamDialog=function (json) {
    if (json.stream) {
        var newCardSentId = json.cardSentId;
        FB.ui(json.stream, function (resp) {
            if (resp && resp.post_id) {
                reportService.successReport(newCardSentId,newCardSentId,resp.post_id);
            } else {
                reportService.cancelReport(newCardSentId);
            }

        });
    }
};

//在其他档案中

var successReport=function(cardId,cardSentId,postId){
    var defered = $q.defer();
    $http.post(reportUrl,$.param({
        cardId:cardId,
        cardSentId:cardSentId,
        postId:postId,
        accessToken: ACCESS_TOKEN
    }))
    .success(function(data){
        defered.resolve(data);})
    .error(function(data){
       defered.reject(data);
    });

    return defered.promise;

};

我发现了问题。它是在我的应用程序集成facebook api。我添加$ rootScope。$ apply call, 并且所有工作都按我的预期进行

service.showStreamDialog = function (json) {
        if (json.stream) {
            var newCardSentId = json.cardSentId;
            FB.ui(json.stream, function (resp) {
                if (resp && resp.post_id) {
                    $rootScope.$apply(function () {
                        $rootScope.$broadcast('CARD_SENT_SUCCESS', {cardSentId: newCardSentId,post_id:resp.post_id});
                    });
                } else {
                    $rootScope.$apply(function () {
                        $rootScope.$broadcast('CARD_SENT_CANCEL', {cardSentId: newCardSentId});
                    });
                }

            });
        }
    };

0 个答案:

没有答案