Ajax 调用 IE8 不显示所有数据,适用于 Firefox 和 IE9

Ajax calls in IE8 not showing all data, Works in firefox and IE9

本文关键字:适用于 Firefox IE9 数据 IE8 调用 显示 Ajax      更新时间:2023-09-26

大家晚上好!

我有一个 Ajax 调用,它将 5 个"回声"从 PHP 脚本加载到div 中。第一个回显创建一个隐藏的表单域,其中 ID 作为值。其余的都是肤浅的,并具有在页面上移动div 的链接。

在 Firefox 中,加载了完整的数据,但在 IE 中,它错过了第一个回显,只显示其他细节。我缺少我需要作为标识符的隐藏元素。

//Some other PHP code.....  the * and % in the value are delimiters for splitting a string later.
echo "<input type='hidden' value='*$substept,$subscon%'>";
echo "<a href='javascript:remcol($part)'>.-.</a>".$substept . "<a href='javascript:paddcolumn($part)'>.+.</a> <br> <a href='javascript:mleft($part)'><<</a>" . $subscon . "<a href='javascript:mright($part)'>>></a>";
echo "<br>Column title <br><input type='text' id='title' size = '10'>";
echo "<br>Column width ";
echo "<br><input type='text' id='tb' size = '10'>";

IE到底怎么会选择性地错过一行php?!隐藏字段绝对没有 html。还。这并非每次都会发生。对于 25 个不同的 DIV,此函数最多被调用 25 次,它将在 IE 中遇到未命中。

检查了它的内部表格等,不知道发生了什么!

在 IE 8 中调用 3 次的示例源代码::查看 Div 03 HTML。

<DIV style="BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid" id=o1>productspgroup<INPUT value=*products,pgroup% type=hidden><A href="javascript:remcol(1)">.-.</A>products<A href="javascript:paddcolumn(1)">.+.</A> <BR><A href="javascript:mleft(1)">&lt;&lt;</A>pgroup<A href="javascript:mright(1)">&gt;&gt;</A><BR>Column title <BR><INPUT id=title size=10><BR>Column width <BR><INPUT id=tb size=10></DIV>
<DIV style="BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid" id=o2>customerphone1<INPUT value=*customer,phone1% type=hidden><A href="javascript:remcol(2)">.-.</A>customer<A href="javascript:paddcolumn(2)">.+.</A> <BR><A href="javascript:mleft(2)">&lt;&lt;</A>phone1<A href="javascript:mright(2)">&gt;&gt;</A><BR>Column title <BR><INPUT id=title size=10><BR>Column width <BR><INPUT id=tb size=10></DIV>
<DIV style="BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid" id=o3><A href="javascript:remcol(3)">.-.</A>products<A href="javascript:paddcolumn(3)">.+.</A> <BR><A href="javascript:mleft(3)">&lt;&lt;</A>price<A href="javascript:mright(3)">&gt;&gt;</A><BR>Column title <BR><INPUT id=title size=10><BR>Column width <BR><INPUT id=tb size=10></DIV>
<DIV id=o4></DIV>
<DIV id=o5></DIV>
<DIV id=o6></DIV>

按照建议检查语法后:

<DIV style="BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid" id=o1><A href="javascript:remcol(1)">.-.</A> customer <A href="javascript:paddcolumn(1)">.+.</A> <BR><A href="javascript:mleft(1)">&lt;&lt;</A>surname<A href="javascript:mright(1)">&gt;&gt;</A><BR>Column title <BR><INPUT id=title size=10><BR>Column width <BR><INPUT id=tb size=10></DIV>
<DIV style="BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid" id=o2><INPUT value=*customer,email% type=hidden><A href="javascript:remcol(2)">.-.</A>customer<A href="javascript:paddcolumn(2)">.+.</A> <BR><A href="javascript:mleft(2)">&lt;&lt;</A>email<A href="javascript:mright(2)">&gt;&gt;</A><BR>Column title <BR><INPUT id=title size=10><BR>Column width <BR><INPUT id=tb size=10></DIV>
<DIV style="BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid" id=o3><INPUT value=*customer,email% type=hidden><A href="javascript:remcol(3)">.-.</A>customer<A href="javascript:paddcolumn(3)">.+.</A> <BR><A href="javascript:mleft(3)">&lt;&lt;</A>email<A href="javascript:mright(3)">&gt;&gt;</A><BR>Column title <BR><INPUT id=title size=10><BR>Column width <BR><INPUT id=tb size=10></DIV>
<DIV style="BORDER-BOTTOM: #000 1px solid; BORDER-LEFT: #000 1px solid; BORDER-TOP: #000 1px solid; BORDER-RIGHT: #000 1px solid" id=o4><INPUT value=*customer,email% type=hidden><A href="javascript:remcol(4)">.-.</A>customer<A href="javascript:paddcolumn(4)">.+.</A> <BR><A href="javascript:mleft(4)">&lt;&lt;</A>email<A href="javascript:mright(4)">&gt;&gt;</A><BR>Column title <BR><INPUT id=title size=10><BR>Column width <BR><INPUT id=tb size=10></DIV>
<DIV id=o5></DIV>

Javascript:

function choosedata(cin){
cot = "so"+cin;
var strr="main.php?func=21&part=" + cin + "&step=" + counter[cin] + "&subs=";
colchange = 'o' + cin;
if (counter[cin] >=2){
strr = strr + document.getElementById(cot).value;
}
callajaxd(strr, colchange);
counter[cin]++;
}

function callajaxd(str,elemin)   //URL String, Box to go in
{
if (str=="")
{
document.getElementById(elemin).innerHTML="";
var back = "";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} 
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
document.getElementById(elemin).innerHTML="<img src='loading.gif' />";
if (xmlhttp.readyState==4 && xmlhttp.status==200)
  {
 document.getElementById(elemin).innerHTML = xmlhttp.responseText;
 } 

}
xmlhttp.open("GET",str,true);
xmlhttp.send();

}

现在回家并使用IE9,它工作正常,至少它唯一的IE8发生,但是即使在兼容模式下,我也无法在Windows 8 PC上安装IE7,因此无法将Virtualbox取出,我将不得不继续调试明天。

只是一个想法,准确获取语法并添加尾部斜杠:

<input type='hidden' value='*$substept,$subscon%' />

IE有时可能会成为婊子。但我不明白为什么只有第一个会被剥离。

在你的

jQuery ajax函数中尝试设置选项cache:"false"

$.ajax({
    url: 'blah.php',
    type: 'post',
    cache: 'false'
});

或者您可以在URL上附加一些随机时间变量,这将欺骗IE认为该页面是新的并且不会使用缓存版本。

$.ajax({
    url: 'blah.php?foo=<?php echo time(); ?>'
});

希望这有帮助...编辑:完全误解了这个问题。认为是IE缓存了Ajax调用;)

只是一个想法,尝试将第一个回声中声明的变量括在大括号中:

echo "<input type='hidden' value='*{$substept},{$subscon}%' />";

我的想法是将它们与元字符隔离开来。

感谢您对此的所有帮助和建议。问题似乎与我拥有的cPanel托管帐户有关。服务器在负载下出现问题。我自己去共享主机的错!干杯!