0

我在这个问题上大发雷霆。我有一个 .html 页面来代表我的移动应用程序的主页。在同一个 html 页面中,我有一个页面定义为登录屏幕。显示登录屏幕的逻辑工作得很好......我的问题是我有一个具有以下签名的登录功能......

ajaxLogin(credentials, successCallback, failureCallback) {
    $.ajax({
            url: SERVER_API + '/login',
            data: credentials,
            type: 'post',
            async: true,
            beforeSend: function () {
                $.mobile.showPageLoadingMsg(true);
            },
            always: function () {
                console.log('always');
                $.mobile.hidePageLoadingMsg();
            },
            done: function (data, status, xhr) {
                console.log('login: ok'); //< -- This never fires but I can see that the server returned a 200 in Safari's developer menu
                successCallback();
            },
            fail: function (request, error) {
                failureCallback(); // <-- This function is never executed when I send bad login info. But again, the server is returning an error status code
            }
        });
}

我认为这很简单……我错过了什么吗?

4

2 回答 2

0

beforeSend函数是 jQuery Ajax 设置 jQuery.ajax( [settings ] ) 的一部分然而alwaysdonefail是 jqXHR 对象的 promise 方法。在您的示例中,您使用了alwaysdonefail作为不正确的设置。

$.ajax({
    url: "http://.....",
    beforeSend: function (xhr) {
        // code
    }
}).done(function (data) {
    // do something
});

您可以在jQ Ajax 文档中找到更多信息。

于 2013-06-03T22:20:15.340 回答
0

我认为您正在寻找“成功”和“错误”,即:

ajaxLogin(credentials, successCallback, failureCallback) {
    $.ajax({
        url: SERVER_API + '/login',
        data: credentials,
        type: 'post',
        async: true,
        success: successCallback,
        error:  failureCallback
    });
}

然后您可以在对这个函数的原始调用中处理您的成功/失败:

ajaxLogin(
    credentialsData, //data you're passing to the function
    function (data)
    {
        //stuff to do on success
    },
    function (jqXHR, statusText, errorThrown)
    {
        //stuff to do on failure
    }
);
于 2013-06-03T22:39:52.887 回答