jQuery Ajax在cordova iOS应用程序之前获得成功之前的成功

时间:2014-08-12 12:17:13

标签: javascript jquery ios ajax cordova

以下摘录更改了登录按钮的html,直到从服务器收到响应为止。

在使用Cordova的应用程序版本中测试我的iPhone时。在更新登录按钮的html之前触发警报。在桌面浏览器中,它按预期工作。

我尝试将缓存和异步设置为false,但没有区别。

除了不同的ajax库,我想不出还有什么可以尝试的?

使用cordova的AJAX有更好的库吗?

$.ajax({
    data: $data,
    cache: false,
    async: false,
    beforeSend: function() {
        $('#btn-login').html('Logging In...');
    },
    success: function(r, status) {
         if (r.status == 'success') {
             getUser();
             initNavSwipeGestures();
             $('#page-index').removeClass('active');
        } else {
            alert(r.message);
        }
    },
    error: function(data, status) {
        alert(status);
    }
});

2 个答案:

答案 0 :(得分:1)

成功时会调用成功 - http://api.jquery.com/jquery.ajax/

  

成功   类型:Function(PlainObject数据,String textStatus,jqXHR jqXHR)   如果请求成功则调用的函数。该函数传递三个参数:从服务器返回的数据,根据dataType参数格式化;描述状态的字符串;和jqXHR(在jQuery 1.4.x,XMLHttpRequest)对象。从jQuery 1.5开始,成功设置可以接受一系列函数。每个函数将依次调用。这是一个Ajax事件。

使用"成功"如果你想检查返回的数据...否则你应该使用"完成"。

这样的事情应该有效:

$.ajax({
    data: $data,
    cache: false,
    async: false,
    beforeSend: function() {
        $('#btn-login').html('Logging In...');
    },
    success: callback()
    },
    complete : function() {
         getUser();
         initNavSwipeGestures();
         $('#page-index').removeClass('active');        
    },
    error: function(data, status) {
        alert(status);
    }
});

var callback = function(response) {
   ///stuff to do after success here
};

答案 1 :(得分:0)

这是我最终的结果:

$('#form-login').on('submit', function(e) {     
    e.preventDefault();
    if ($.trim($('#email').val()) === '' || $.trim($('#password').val()) === '') {
        return;
    }

    var loginBtn = Ladda.create( document.querySelector('#btn-login') );
    $data = $('#form-login').serializeArray();

    $.ajax({
        data: $data,
        beforeSend: function() {
            $('#btn-login').addClass('isloading');
            loginBtn.start();
        },
        success: function(r, status) {
            setTimeout(loginResponse(r, loginBtn), 500);
        },
        error: function(data, status) {
            if (PLATFORM == 'desktop') {
                alert(status);
            } else {
                loginBtn.stop();
                $('#btn-login').removeClass('isloading');
                navigator.notification.alert(status, false, false);
            }
        }
    });
});

function loginResponse(r, loginBtn) {
    if ($('#btn-login').hasClass('isloading')) {
        if (r.status == 'success') {
            getUser();
            $('#page-index').removeClass('active');
        } else {
           if (PLATFORM == 'desktop') {
                alert(r.message);
            } else {
                navigator.notification.alert(r.message, false, false);
            }
        }
        loginBtn.stop();
        $('#btn-login').removeClass('isloading');
    } else {
        setTimeout(loginResponse(r, loginBtn), 500);
    }
}