Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在cordova iOS应用程序上发送之前jQuery Ajax触发成功_Javascript_Jquery_Ios_Ajax_Cordova - Fatal编程技术网

Javascript 在cordova iOS应用程序上发送之前jQuery Ajax触发成功

Javascript 在cordova iOS应用程序上发送之前jQuery Ajax触发成功,javascript,jquery,ios,ajax,cordova,Javascript,Jquery,Ios,Ajax,Cordova,以下摘录更改登录按钮的html,直到从服务器收到响应 在我的iPhone上使用Cordova构建应用程序进行测试时。该警报在更新登录按钮的html之前触发。在桌面浏览器中,它按预期工作 我已经尝试将缓存和异步设置为false,但没有任何区别 除了不同的ajax库,我想不出还有什么可以尝试的 是否有更好的库用于cordova的AJAX $.ajax({ data: $data, cache: false, async: false, beforeSend: func

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

在我的iPhone上使用Cordova构建应用程序进行测试时。该警报在更新登录按钮的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);
    }
});

成功时称为成功-:

成功 类型:函数(纯对象数据、字符串textStatus、jqXHR jqXHR) 请求成功时要调用的函数。函数传递三个参数:从服务器返回的数据,根据dataType参数格式化;描述状态的字符串;和jqXHR(在jquery1.4.x中,XMLHttpRequest)对象。从jQuery1.5开始,success设置可以接受一系列函数。每个函数将依次调用。这是一个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
};

以下是我最终得到的结果:

$('#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);
    }
}

正在触发哪个警报,成功还是错误?正在触发成功。警报中显示了什么?来自服务器的响应消息-不正确的登录详细信息“登录…”将异步执行。很可能是即时调用成功,因此“登录…”更新肉眼看不到。您可以使用setTimeout(大约5秒)调用成功回调,并检查更新前是否显示状态“登录…”。是的,我的json响应中也会返回success | error,它表示登录是否成功。我在成功回调中检查它。您是否尝试过在safari中测试它?这是一个更好的iOS混合应用测试平台。谢谢你的提示。我还没有找到调试我的应用程序的方法。我才用了几天科尔多瓦。它是无价的。。。Inspect元素-console for console.log(“”)和Inspect元素窗口顶部的resources选项卡将允许您查看本地存储或webSQL数据库。您还可以在UI方面更接近您将在手机上看到的最终结果。真是无价之宝!