我在做H5Builder App的过程中首先使用的是XMLHttpRequest,但使用之后发现网络请求非常不稳定,为什么这么说,1、我们服务器是带宽50M的,2、之前用web应用访问过几个月了,速度一直都非常快且稳定,3、我写过demo,一直循环测同样的接口,很稳定,下面有图,4、反观H5Builder的速度,时而快时而慢,快的时候可以只要最低耗时 3秒(服务器做了3秒延迟返回),慢的时候可以到6-7秒或者直接超时。
想请教一下,谁遇到过此类问题没,一下贴代码。
function xhrCreate2(params) {
var param = {
url:"",
data:{},
type:"get",
cache:false,
expire:null,
timeout:8500,
refreshCache:false,
sucess:function(txt){},
error:function(xhr){}
}
$.extend(param,params);
//console.log( "创建请求:" );
var xhr = new plus.net.XMLHttpRequest();
if(param.timeout)xhr.timeout = param.timeout;
var timeout1=0,timeout2=0;
xhr.onreadystatechange = function () {
switch ( xhr.readyState ) {
case 0:
//console.log( "xhr请求已初始化" );
break;
case 1:
//console.log( "xhr请求已打开" );
break;
case 2:
timeout1 = new Date();
//console.log( "xhr请求已发送" );
break;
case 3:
timeout2 = new Date();
console.log( "xhr请求已响应,耗时:"+(timeout2.getTime()-timeout1.getTime()));
break;
case 4:
//console.log( "xhr请求已完成");
if ( xhr.status == 200 ) {
console.log( "xhr请求成功("+param.url+"):"+xhr.responseText );
if(param.cache){
if(param.expire){
myStorage.setItem(param.url,xhr.responseText,param.expire);
}else{
myStorage.setItem(param.url,xhr.responseText);
}
}
try {
var data = JSON.parse(xhr.responseText);
if("false" == data.auth_login && "true" == data.refresh_token){//所有接口都要验证用户是否登陆,如果没登陆则直接跳到登陆界面
myStorage.setItem("token","guest");
}
} catch (e) {
console.log(e);
}
if("function" == typeof param.sucess){
param.sucess(xhr.responseText)
}
} else {
console.log( "xhr请求失败:"+xhr.status );
if("function" == typeof param.error){
param.error(xhr);
}
}
break;
default :
break;
}
xhr.ontimeout = function(){
console.log( "xhr请求超时:");
plus.nativeUI.alert("请求超时,请重试!");
plus.nativeUI.closeWaiting();
}
}
var token = myStorage.getItem("token");//用户请求标识
if("post" == param.type.toLowerCase()){
param.data['token'] = token;
xhr.open( param.type, param.url );
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
//xhr.send('user=HBuilder&test=value');
xhr.send($.param(param.data));
}else{
if(param.url.indexOf("?") > -1){
param.url += "&" + $.param(param.data) + "&token="+token;
}else{
param.url += "?" + $.param(param.data)+ "&token="+token;
}
if(param.cache && "get" == param.type.toLowerCase() && myStorage.getItem(param.url) && !param.refreshCache){//如果启用了缓存属性,则直接读取缓存
if("function" == typeof param.sucess){
param.sucess(myStorage.getItem(param.url));
console.log("读取数据缓存url:"+param.url);
return xhr;
}
}
xhr.open( param.type, param.url );
xhr.send();
}
return xhr;
}
wenju
意思是用APP上最好用mui.ajax对吗
2016-10-09 09:58
wenju
mui.ajax最终还是用的 plus.net.XMLHttpRequest()吧
2016-10-09 09:59