/**
* 请求API
* @param {String} url
* @param {Object} [data]
* @param {Function} [success]
* @param {Function} [error]
* @param {Boolean} [autoWait]
*/
function requestAPI() {
var args = arguments,
argCount = args.length,
url = '',
data = {},
success = null,
error = null,
autoWait = true;
for (var i = 0; i < argCount; i++) {
switch (true) {
case typeof args[i] == 'string':
url = args[i];
break;
case typeof args[i] == 'object':
data = args[i];
break;
case typeof args[i] == 'function':
if (!success) {
success = args[i];
} else {
error = args[i];
}
break;
case typeof args[i] == 'boolean':
autoWait = args[i];
break;
default:
console.log(args[i]);
break;
}
}
url = ~args[0].indexOf('http://') ? url : siteUrl +'Handler/User.ashx?type=' + url;
// 显示等待框
if(autoWait) plus.nativeUI.showWaiting('请求中...', {padlock : true});
$.ajax(url, {
data: data,
dataType: 'json',
type: 'post',
timeout: 20000,
success: function(data) {
// 请求成功
if(autoWait) plus.nativeUI.closeWaiting();
if (data.status > 0) {
success && (success(data));
} else {
error && (error(data));
}
},
error: function(xhr, type, errorThrown) {
console.log(xhr);
console.log(type);
console.log(errorThrown);
if(autoWait) plus.nativeUI.closeWaiting();
error && (error({
status: 0,
msg: '网络错误,请稍后重试'
}));
}
});
}
// 请求登录
plus.nativeUI.showWaiting('登录中...');
var postData = {
no: cardno,
pwd: pwd==pwdDefault ? '' : pwd,
token: pwd==pwdDefault ? cacheData[2] : '',
client: plus.device.uuid
}
/*
console.log('login-----------------------');
console.log(postData.no);
console.log(postData.pwd);
console.log(postData.token);
console.log(postData.client);
*/
requestAPI('login', postData, function(data) {
/*
console.log('success-----------------------');
console.log(data.status);
console.log(data.msg);
console.log(data.token);
*/
// 记录登录信息
cacheData[0] = cardno;
if($rember.checked) {
cacheData[1] = pwdDefault;
cacheData[2] = data.token;
}else{
cacheData[1] = '';
cacheData[2] = '';
}
//console.log($rember.checked +' : '+ cacheData.join(' - '));
plus.storage.setItem(cahceKey, cacheData.join(cacheSplit));
// 进入首页
plus.webview.create('index.html', 'index');
}, function(data) {
plus.nativeUI.closeWaiting();
/*
console.log('error-----------------------');
console.log(data.status);
console.log(data.msg);
console.log(data.token);
*/
if(data.status==-1) {
$pwd.value = '';
$.toast('登录失败,请输入密码重试');
cacheData[1] = '';
cacheData[2] = '';
plus.storage.setItem(cahceKey, cacheData.join(cacheSplit));
}else{
$.toast(data.msg);
}
}, false);
6 个回复
DCloud_UNI_FXY
贴一下你的代码。
请求的地址能否公开访问?
能否发现规律?任意的url都有此现象,还是只有特定的请求会发生?
踩着单车载着猪 (作者)
DCloud_UNI_FXY
单看代码看不出不妥,是否可以用多台ios设备在多个wifi环境测试,看看是某台ios设备或某wifi的问题。还是均会发生此现象
2015-05-23 21:55
踩着单车载着猪 (作者)
已经测试过了,很容易重现,但是重现又没有规律,多台设备,多个不同的wifi环境
2015-05-23 21:56
踩着单车载着猪 (作者)
这是首页,app一打开就显示的登陆页,有时候是真机调试刚启动,有时候又是从后台切换过来
2015-05-23 22:02
踩着单车载着猪 (作者)
没人遇到这问题吗。。。还是就我比较奇葩。。。很经常遇到啊···
DCloud_UNI_FXY
android上没这个问题?ios的模拟器有问题没有?3g,4g也都没问题?
另外你用最新版本mui试试。如果你的登陆页面是在本地的话,xhr不再使用plus的xhr。
我看你题目里的日志,似乎使用的还是plus的xhr
2015-05-24 15:07
踩着单车载着猪 (作者)
回复 DCloud_UNI_FXY:测试了下,是使用window.XMLHttpRequest...可是为什么会这样呃···
2015-05-24 16:18
DCloud_UNI_FXY
你是说使用window.XMLHttpRequest导致的abort?那换成plus的呢。
2015-05-24 17:00
蔡繁荣 - 发表是最好的记忆
同问,特别wifi环境改变后,无论怎么杀掉进程重启,都是abort
DCloud_UNI_FXY
你的是webview集成?
2015-06-18 22:50
蔡繁荣
回复 DCloud_UNI_FXY: 是webview的
2015-06-19 09:23
DCloud_UNI_FXY
回复 蔡繁荣:我记得回复过你,使用plus的xhr。也一样会遇到wifi切换发生abort?
2015-06-20 06:51
蔡繁荣
回复 DCloud_UNI_FXY: 我使用的是mui.ajax,很经常出现abort
2015-06-20 10:10
DCloud_UNI_FXY
临时解决方案:mui.ajaxSettings.xhr=function(){return new plus.net.XMLHttpRequest();}
2015-06-20 14:53
1***@qq.com
回复 DCloud_UNI_FXY: 尝试了这种方法 并没有解决 , 使用代理抓包 接口返回数据是正常的 状态码是200 。 xhr.readyState = 4 , status = 0
2017-06-23 15:04
1***@qq.com
遇到了同样的问题,使用网络工具抓包响应数据时正常的 , 请问楼主解决了嘛?
t***@163.com
这个问题后来解决了吗,今天上午也遇到了这种情况,majax请求触发了error,但Charles抓包的数据全是正常的,希望官网人员能给够回复。