Javascript 在cordova iOS应用程序上发送之前jQuery Ajax触发成功
以下摘录更改登录按钮的html,直到从服务器收到响应 在我的iPhone上使用Cordova构建应用程序进行测试时。该警报在更新登录按钮的html之前触发。在桌面浏览器中,它按预期工作 我已经尝试将缓存和异步设置为false,但没有任何区别 除了不同的ajax库,我想不出还有什么可以尝试的 是否有更好的库用于cordova的AJAXJavascript 在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
$.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方面更接近您将在手机上看到的最终结果。真是无价之宝!