gpt4 book ai didi

jquery - IE9 仅在按 F12 后才能正确进行 ajax 调用

转载 作者:行者123 更新时间:2023-12-03 21:52:50 26 4
gpt4 key购买 nike

我的 JSP 页面中有这个 jQuery 代码(jQuery 1.7.2):

   function Header() {
this.add = function ( parentDiv, leftToolbar, rightToolbar ) {
hbHeader = Handlebars.compile( $( "#hb-header" ).html() );

$( parentDiv ).html( hbHeader( {user:{tenantDescription:"", firstName:"", lastName:""},
leftTB:null, rightTB:null } ) );

$.ajax( {
url:"${pageContext.request.contextPath}/services/login/sessionUser",
type:"POST",
async:true,
success:function ( result ) {
app.user = result;
var ltHtml;
var rtHtml;
if ( leftToolbar ) {
ltHtml = new Handlebars.SafeString( leftToolbar );
}
if ( rightToolbar ) {
rtHtml = new Handlebars.SafeString( rightToolbar );
}
$( parentDiv ).html( hbHeader( {user:app.user,
leftTB:{
html:ltHtml,
hidden:leftToolbar == null
},
rightTB:{
html:rtHtml,
hidden:rightToolbar == null
}
} ) )
},
error:function( jqXHR, textStatus, errorThrown ) {
alert("error in ajax");
}
} );
}
}

在执行此代码之前,会注册一个 ajaxSend 和一个 ajaxError 监听器。就像这样:

  $( "#log-window" ).ajaxSend( function ( event, jqXhr, ajaxOptions ) {
console.log( "handling an ajax request adding username and password to the header" );
jqXhr.setRequestHeader( 'username', $.cookie( 'username' ) );
jqXhr.setRequestHeader( 'password', $.cookie( 'password' ) );
} );
$( "#log-window" ).ajaxError( function ( errorThrown, xhr, failedReq, textStatus ) {
alert("error in "+failedReq.url);
if ( textStatus == 'timeout' ) {
if ( !failedReq.tryCount ) {
failedReq.tryCount = 1;
failedReq.retryLimit = 3;
}
if ( failedReq.tryCount++ <= failedReq.retryLimit ) {
//try again
$.ajax( failedReq );
return;
}
throw 'Es wurde ' + failedReq.retryLimit + ' Mal versucht. Die Verbindung scheint nicht zu funktionieren.';
return;
}
if ( xhr.status == 500 ) {
if ( $.cookie( 'pageRefreshed' ) == null ) {
$.cookie( 'pageRefreshed', 'true', { expires:10000 } );
location.reload();
}
throw 'Der Server hatte ein Problem. Bitte melden Sie den Fehler and den Systemadministrator';
} else if ( xhr.status == 401 ) {
if ( failedReq.url != "${pageContext.request.contextPath}/services/login" ) {
var loginData = {
username:$.cookie( 'username' ),
password:$.cookie( 'password' )
};
loginAttempt( failedReq, loginData );
}
} else {
throw 'Oops! There was a problem, sorry.';
}
} );

整个页面可以在 http://alpha.sertal.ch:8181/VisionWeb/data-details/#data:12300923 下访问

如果您愿意,您甚至可以登录。用户:alsoft03 密码:密码

第一次进行ajax调用时会发生401错误,因为用户没有登录;这就是 IE 失败的地方。 ajaxSend 监听器被调用,但 ajaxError 未被调用。如果我在 $.ajax 本身上设置错误回调,它也不会被调用。

当我使用真正的浏览器(Firefox、Chrome、Opera)打开页面时,它工作正常并要求输入密码。除非您按 F12,否则 IE 不会这样做,在这种情况下,该网站也会按预期工作。

确实很奇怪。您在控制台打开的情况下加载页面并且它可以工作。控制台关闭后,它只显示一个空标题。页面加载后,您可以关闭控制台,它将继续加载。

我在不同的机器上进行了测试并得到了相同的结果。

这让我发疯。我无法调试,因为如果我用 F12 打开调试器,它工作正常。

我知道没有进行 ajax 回调,因为我将 alert("I got so far") 行放在不同的位置。

如果有人有线索,非常欢迎。

最佳答案

需要从脚本中删除 console.log() 的所有实例,以便在不处于开发人员模式的情况下在 IE9 中工作。

更新我很高兴这个答案对一些人有所帮助。只是想我会用一个简单的解决方案来更新这个答案,我一直在使用 HTML5 Boilerplate :

// Avoid `console` errors in browsers that lack a console.
(function() {
var method;
var noop = function () {};
var methods = [
'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
'timeStamp', 'trace', 'warn'
];
var length = methods.length;
var console = (window.console = window.console || {});

while (length--) {
method = methods[length];

// Only stub undefined methods.
if (!console[method]) {
console[method] = noop;
}
}
}());

将其放在代码之前,它应该可以帮助您避免在缺少控制台的浏览器中出现任何控制台错误。

关于jquery - IE9 仅在按 F12 后才能正确进行 ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11147553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com