我有一个从我的一个页面调用的小PHP函数。
function ratingDetails($uid, $align, $width) {
$queryFull = "SELECT * FROM rating WHERE uid = $uid";
$resultFull = mysql_query($queryFull);
//START DISPLAY TABLE IF RESULTS
if(mysql_num_rows($resultFull) > 0) {
echo "<table class=\"ratingTable\" align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\" width=\"550\">\n";
echo "<tr bgcolor=\"#6699cc\"><th>STARS</th><th>DATE RATED</th><th>COMMENT</th><th>RATED BY</th></tr>\n";
while($rowFull = mysql_fetch_array($resultFull)) {
$rating = $rowFull['rating'];
$comment = $rowFull['comment'];
$datePosted = date("M j, Y", $rowFull['date']);
$rid = $rowFull['raterID'];
$rater = getUsername($rid);
//SHOW STARS
if($rating == 0) { $stars = "notYet.jpg"; }
if($rating == 1) { $stars = "starOne.jpg"; }
if($rating == 1.5) { $stars = "starOneHalf.jpg"; }
if($rating == 2) { $stars = "starTwo.jpg"; }
if($rating == 2.5) { $stars = "starTwoHalf.jpg"; }
if($rating == 3) { $stars = "starThree.jpg"; }
if($rating == 3.5) { $stars = "starThreeHalf.jpg"; }
if($rating == 4) { $stars = "starFour.jpg"; }
if($rating == 4.5) { $stars = "starFourHalf.jpg"; }
if($rating == 5) { $stars = "starFive.jpg"; }
//DISPLAY IT ALL
echo "<tr><td width=\"10\"><img src=\"/images/rating/$stars\" width=\"105\" height=\"20\" /></td>";
echo "<td width=\"75\" align=\"center\">$datePosted</td><td>$comment</td><td width=\"85\">$rater</td></tr>\n";
}//END WHILE
echo "</table>\n";
} //END IF
else {
echo "<table class=\"ratingTable\" align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"8\" width=\"550\">\n";
echo "<tr><td align=\"center\"><span class=\"blue\">NO REVIEWS OR RATINGS FOR THIS DISTRIBUTOR</span></td></tr></table>\n";
} //END IF ELSE
}
但是当它在IE(7或8)中运行时,会抛出此错误:
此页面上的脚本导致Internet Explorer运行缓慢。 Bla bla bla ...
我从两个页面调用此函数,两者都会导致相同的错误。如果我从页面中删除了该呼叫,则页面加载正常。
相关网页没有涉及javascript ...
帮助,帮助,帮助...我没有多少头发......
瑞克
答案 0 :(得分:1)
正在发生的事情是执行脚本需要很长时间。 IE正在等待服务器的输出,但这需要很长时间。
您可能想要尝试每行调用flush()(或者使用模运算符每25行)或使用ob_implicit_flush()来启用隐式刷新。这样你就可以不断地将数据返回浏览器(我假设你有大量的数据)。您可能还需要调用set_timeout(0)来禁用脚本的30秒时间限制。
答案 1 :(得分:0)
我要做的第一件事就是去掉星星的所有IF语句,要么使用数组,要么使用switch语句,其中任何一个都会减少脚本所需的处理。阵列将是我的方法。您的代码如下所示:
function ratingDetails($uid, $align, $width) {
$ queryFull =“SELECT * FROM rating WHERE uid = $ uid”; $ resultFull = mysql_query($ queryFull);
//为星星声明数组。 $ astars = array( 0 =&GT; “notYet.jpg” 1 =&GT; “starOne.jpg” 1.5 =&GT; “starOneHalf.jpg” 2 =&GT; “starTwo.jpg” 2.5 =&GT; “starTwoHalf.jpg” 3 =&GT; “starThree.jpg” 3.5 =&GT; “starThreeHalf.jpg” 4 =&GT; “starFour.jpg” 4.5 =&GT; “starFourHalf.jpg” 5 =&GT; “starFive.jpg” );
//START DISPLAY TABLE IF RESULTS
if(mysql_num_rows($resultFull) > 0) {
echo "<table class=\"ratingTable\" align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\" width=\"550\">\n";
echo "<tr bgcolor=\"#6699cc\"><th>STARS</th><th>DATE RATED</th><th>COMMENT</th><th>RATED BY</th></tr>\n";
while($rowFull = mysql_fetch_array($resultFull)) {
$rating = $rowFull['rating'];
$comment = $rowFull['comment'];
$datePosted = date("M j, Y", $rowFull['date']);
$rid = $rowFull['raterID'];
$rater = getUsername($rid);
$stars = $astars[$rating];
//DISPLAY IT ALL
echo "<tr><td width=\"10\"><img src=\"/images/rating/$stars\" width=\"105\" height=\"20\" /></td>";
echo "<td width=\"75\" align=\"center\">$datePosted</td><td>$comment</td><td width=\"85\">$rater</td></tr>\n";
}//END WHILE
echo "</table>\n";
} //END IF
else {
echo "<table class=\"ratingTable\" align=\"center\" border=\"1\" cellspacing=\"0\" cellpadding=\"8\" width=\"550\">\n";
echo "<tr><td align=\"center\"><span class=\"blue\">NO REVIEWS OR RATINGS FOR THIS DISTRIBUTOR</span></td></tr></table>\n";
} //END IF ELSE
小数可能会导致数组出现问题;如果是这样,你可以将键括在引号中;例如,"1.5"=>"starOneHalf.jpg"
您可以做的另一件事是为HTML输出创建一个变量,而不是每行回显输出,然后在结尾处回显输出。
答案 2 :(得分:0)
我发现了我的问题...... 我的函数中的表被分配了一个css类。这个特殊的css类包含一个名为PIE.htc的行为。显然,这会导致某种IE在被调用时融化。我删除了PIE(在IE中没有更多的圆角或阴影),我的问题解决了!
感谢所有在此过程中提供帮助的人!!!