jQuery ajax没有在子函数中触发

时间:2014-09-10 19:34:35

标签: javascript jquery ajax oop

我正在创建一个非常大的脚本,所以我采用面向对象的javascript方法。 当试图使用jQuery的ajax时(或者之前是文档准备的简写)它没有被解雇,我不知道为什么。

(将整个文档就绪代码复制粘贴到chrome控制台中显示ajax调用确实有效,但它只是不在子函数内运行)

我的代码:

// Main class
function Arina(loginstate) {
    var loginstate = loginstate;
}


/**
 * attempts to log the user in
 * @
 * @param  {string} username [user's username]
 * @param  {string} password [user's password]
 * @return {array}           [status, message]      
 */
Arina.prototype.login = function(username, password) {
    /**
     * Validate if the user has filled in all required fields
     */
    if (username == '' || username == null)  return [false, 'No username given.']; 
    if (password == '' || password == null)  return [false, 'No password given.'];

    /**
     * Set up ajax payload
     */
    var payload = {
        username : username,
        password : password,
        unhashed  : true
    }


    /**
     * Document ready for jQuery
     */
    $(document).ready(function(){   

        /**
         * Make ajax call to check credentials
         * @param {object} 'payload' [Form data]
         */
        $.ajax({
            url     : '/arina/app',
            type    : 'POST',
            data    : payload
        }).always(function(response, status, xhr){
            if (response == 'success') {
                return [true, 'Login successful.'];
            } else {
                return [response, status, xhr];
            }

            console.log("I'm not getting fired!!"); // Code ever reaches this.
        });



        /**
         * Catch jQuery ajax error
         * @param  {object} event       
         * @param  {object} xhr         
         * @param  {object} settings    
         * @param  {string} thrownError 
         * @return {array}             
         */
        $(document).ajaxError(function(event, xhr, settings, thrownError) {
            if (xhr.status == 401) return [false, 'Invalid username or password.'];
            if (xhr.status == 500) return [false, 'Internal server error, please contact an administrator.'];
        });
    });
}

// I call the method once the script has been loaded (along with the rest of the JS files)
var arina = new Arina(1);
arina.login('test', 'test');

更新

子函数DOES触发ajax,但从不调用回调函数。

1 个答案:

答案 0 :(得分:2)

未达到

console.log("I'm not getting fired!!");因为它上面的返回语句。

这是一个working example

两个主要变化:

  • $.ajax的回调函数已更正
  • $(document).ready已删除

其他信息:
而不是:

    $.ajax({
        url     : '/arina/app',
        type    : 'POST',
        data    : payload
    })

你可以使用:

    $.post('/arina/app', data)

代替always并检查您可以使用的结果:

    .done(function() {
        // handle success
    })
    .fail(function() {
        // handle fail
    })