Angularjs在使用服务中的promises关联Ajax请求时出现问题

时间:2014-09-26 10:53:56

标签: angularjs angularjs-service angularjs-http

对于我在服务中的Angularjs应用程序,我使用Ajax调用来获取数据,如下所示:

var originalRequest = $.ajax({
                    async : false,
                    url : "/dash/dashboard2ajax.do",
                    type : "POST",
                    data : {
                        action : 'getNetSpendOverTime',
                        customerId : selectedAccTd,
                        carriersId : selectedCarriers,
                        fromDate : formattedFromDate,
                        toDate : formattedToDate
                    },
                    dataType : "json",
                    success : function(originalRequest) {
                        var res = originalRequest;
                        data = res.ResultSet.Response;

                    }
                });

然后我只是从我的服务返回(数据),在我的控制器中我能够毫无问题地获取数据。但我意识到这是一种不好的做法,并试图使用承诺。所以我把它替换成如下:

var originalRequest = $http({
            url: "/dash/dashboard2ajax.do",
            method: "POST",
            data: {action : 'getNetSpendOverTime',
                customerId : selectedAccTd,
                carriersId : selectedCarriers,
                fromDate : formattedFromDate,
                toDate : formattedToDate}
        }).success(function(data, status, headers, config) {
           return (data);
        }).error(function(data, status, headers, config) {
            return(status);
        });

但它不起作用。没有任何参数甚至传递给我的动作类。我的语法有什么错误吗?

在我的动作类中,我正在访问参数

String action = request.getParameter("action");

但它会变为空。

1 个答案:

答案 0 :(得分:1)

您正在尝试将jQuery.ajax替换为具有完全不同合同的AngularJS $http。您调用originalRequest的事实上并不是任何类型的请求对象"。它只是Promise(使用successerror方法扩展)。如果要在成功/错误处理程序之外访问请求数据,则需要自行保存并单独传递:

var data = {
    // ...
};
var request = $http({
    data: data,
    // ...
});
return {
    request: request,
    data: data
};

如果您需要在处理程序中访问它,只需从config参数中获取它:

$http(...).success(function (data, status, headers, config) {
    var action = config.data.action;
    // ...
});