关于jquery中ajax请求在ie中报No Transport错误解决流程
首先背景就是测试同学发现我们的网页在ie9中展示不正确,实际是所有异步的接口都没有执行。然后我就开始了苦逼的排查过程。我们所有异步接口都是使用jquery的ajax方法发出的,使用的jquery版本是1.11.0。
我最先定位到的是ajax方法返回status=0,statusText=No Transport。然后开始了我的查找问题之旅,我在网上所查出的资料都说这个是由于跨域造成的,加上$.support.cros=true
就可以。但实际我们项目访问的接口并不属于跨域。所以虽然加上这个属性可以解决问题,但并没有找到根源。
于是我开始看jquery的源码,先定位了发生错误的代码段,先贴上报错点:
// Get transport
transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
// If no transport, we auto-abort
if ( !transport ) {
done( -1, "No Transport" );
} else {
jqXHR.readyState = 1;
// Send global event
if ( fireGlobals ) {
globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
}
// Timeout
if ( s.async && s.timeout > 0 ) {
timeoutTimer = setTimeout(function() {
jqXHR.abort("timeout");
}, s.timeout );
}
try {
state = 1;
transport.send( requestHeaders, done );
} catch ( e ) {
// Propagate exception as error if not done
if ( state < 2 ) {
done( -1, e );
// Simply rethrow otherwise
} else {
throw e;
}
}
}
此处transport =false。刚开始并不能完全看懂jquery源码,于是请教了我们公司的一位大神,在大神的指导下我开始排查为何transport =false。经过万能的断点调试,发现是由于下列代码中的options.crossDomain = tr