Javascript 修复Ajax调用的IE 12030重复性错误
我只是循环Ajax调用,直到12030错误消失。该错误被报告为错误 是否有人知道是否有更好的解决方案…因为这需要时间循环。我读到这是IE的一个已知问题,它会间歇性地产生12030个错误,就像Ajax状态一样Javascript 修复Ajax调用的IE 12030重复性错误,javascript,ajax,internet-explorer,Javascript,Ajax,Internet Explorer,我只是循环Ajax调用,直到12030错误消失。该错误被报告为错误 是否有人知道是否有更好的解决方案…因为这需要时间循环。我读到这是IE的一个已知问题,它会间歇性地产生12030个错误,就像Ajax状态一样 var Ajax = { createAjaxObject: function() { var request; try { request = new XMLHttpRequest();
var Ajax = {
createAjaxObject: function()
{
var request;
try
{
request = new XMLHttpRequest();
}
catch(error)
{
try
{
request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(error)
{
try
{
request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(error)
{
request = false;
}
}
}
return request;
},
useAjaxObject: function( path, param, ajax_func, html_div )
{
var object = new Ajax.createAjaxObject();
object.open( "POST", path, true );
object.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" );
object.setRequestHeader( "Content-length", param.length );
object.setRequestHeader( "Connection", "close" );
object.onreadystatechange = function()
{
if( this.readyState === 4 )
{
if( this.status === 200 )
{
ajax_func( this.responseText, html_div );
}
else
{
Ajax.repeatUseAjaxObject( path, param, ajax_func, html_div );
return false;
}
}
};
object.send( param );
return true;
},
repeatUseAjaxObject: function( path, param, ajax_func, html_div )
{
var state = false,
count = 1;
while(state === false && count <= 5)
{
state = Ajax.useAjaxObject( path, param, ajax_func, html_div );
if( count !== 1 )
{
alert( 'Ajax Object Use Failed ');
}
count++;
}
return state;
}
var Ajax={
createAjaxObject:function()
{
var请求;
尝试
{
请求=新的XMLHttpRequest();
}
捕获(错误)
{
尝试
{
请求=新的ActiveXObject(“Msxml2.XMLHTTP”);
}
捕获(错误)
{
尝试
{
请求=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
捕获(错误)
{
请求=假;
}
}
}
返回请求;
},
useAjaxObject:function(路径、参数、ajax\u func、html\u div)
{
var object=new Ajax.createAjaxObject();
打开(“POST”,路径,true);
setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);
setRequestHeader(“内容长度”,param.length);
setRequestHeader(“连接”、“关闭”);
object.onreadystatechange=函数()
{
if(this.readyState==4)
{
如果(this.status==200)
{
ajax_func(this.responseText,html_div);
}
其他的
{
repeatUseAjaxObject(路径、参数、Ajax\u func、html\u div);
返回false;
}
}
};
发送对象(param);
返回true;
},
repeatUseAjaxObject:function(路径、参数、ajax\u func、html\u div)
{
var state=false,
计数=1;
while(state===false&&count这是internet explorer中XMLHttpRequest的底层套接字处理中记录的错误
当您使用XMLHttpRequest对象从服务器读取响应时,服务器必须先清除读取缓冲区(即使它不感兴趣)
确保服务器端代码在发送响应之前读取整个请求字节
如果您指定使用哪种服务器技术,我可以给您举个例子。您说您正在循环,但也许设置重试超时而不是循环将是避免用户察觉延迟的一个好方法(除非您真的打算在得到答案之前阻止其他JavaScript执行!)这并不能防止出现错误,但这将是减轻对浏览器影响的唯一客户端方法。(我从您的评论“因为这需要时间来循环”中假设浏览器延迟。这是您真正的问题)
事实上,我可能把你理解得太字面了……现在我想一个实际的循环也会禁止后续的请求。你能更具体地描述一下你的“循环”技术吗?你所说的“占用时间”是什么意思?我也有同样的问题,我找到了一个解决方案,只要AJAX请求是异步的,它就可以为我工作
解决方案是将AJAX调用封装在延迟为0的setTimeout
调用中
这似乎对我来说100%的时间都有效
我还与我的一位同事核实,12030错误仍然发生在InternetExplorer9中
因此Billy G和公司认为适合为我们提供新的“Metro”界面,但他们不必费心去修复所有网络程序员都必须支持的浏览器
你能添加更多细节吗?比如IE版本和你正在使用的代码吗?我使用的是Linux Apache MysQL PHP。我不认为这是服务器问题。这是我的循环,只是5次重复调用……我已经有一段时间没有使用IE了,所以我没有使用过我真的看到了警报弹出。不是延迟。而是我不知道为什么会发生这种情况,我不想养成循环重复性问题的习惯。