3

我正在尝试使用“Amplifyjs”来处理 AJAX 请求,就像 John Papa 在他的 Pluralsight 课程中所做的那样,但我遇到了身份验证问题。

我正在使用表单身份验证。一切正常。

我的问题来自未经身份验证的请求。我找不到让“amplifyjs”将http代码(401、403 ...)返回给错误函数的方法,以区分由于未通过身份验证而失败的请求和由于不符合业务逻辑而失败的请求。

一个请求示例是:

amplify.request.define("products", "ajax", {
                url: "/api/Products",
                datatype: "json",
                type: "GET"
            });
amplify.request({
                    resourceId: "products",
                    success: callbacks.success,
                    error: function (datos, status) {
                              //somecode
                           }
                });

谢谢你。

4

2 回答 2

6

如果您想要 XHR 对象并传递它,您可以创建一个解码器。它将包含您可能需要的错误代码和其他信息。

amplify.request.define("products", "ajax", {
    url: "http://httpstat.us/401",
    datatype: "json",
    type: "GET",
    decoder: function ( data, status, xhr, success, error ) {
        if ( status === "success" ) {
            success( data, xhr );
        } else if ( status === "fail" || status === "error" ) {
            error( status, xhr );
        } else {
            error( status, xhr );
        }
    }
});

amplify.request({
    resourceId: "products",
    success: function(data, status) {
        console.log(data, status);        
    },
    error: function(status, xhr) {
        console.log(status, xhr);
    }
});​

您可以通过查看此http://jsfiddle.net/fWkhM/来测试上述代码

于 2012-11-07T06:16:09.103 回答
2

感谢您的回答。

最后,当我看到没有人回答我时,我做了类似于你建议的事情:

var decoder = function (data, status, xhr, success, error) {
    if (status === "success") {
        success(data, status);
    } else if (status === "fail" || status === "error") {
        try {
            if (xhr.status === 401) {
                status = "NotAuthorized";
            }
            error(JSON.parse(xhr.responseText), status);
        } catch (er) {
            error(xhr.responseText, status);
        }
    }
};

在我修改默认解码器后:

amplify.request.decoders._default = decoders.HeladeriaDecoder;

在错误回调中,我管理了返回的状态。

error: function (response, status) {
    if (status === "NotAuthorized") {
        logger.error(config.toasts.errorNotAuthenticated);
    } else {
        logger.error(config.toasts.errorSavingData);
    }
//more code...
}
于 2012-11-07T18:30:57.843 回答