2010-02-11 85 views
1

这里是我的javascript代码:阿贾克斯打印从Perl脚本输出 - 问题与IE7

var xmlhttp; 
var result; 
function load() 
{ 
xmlhttp=null; 
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=state_Change; 
xmlhttp.open("GET",getLauncherPath,true); 
xmlhttp.send(null); 
} 

function state_Change() 
{ 
if (xmlhttp.readyState==3){ 
    if (xmlhttp.status==200){ 
    result = "readyState = 3, counting begins\n"; 
    result += xmlhttp.responseText; 
    document.getElementById('T1').innerHTML= result; 
    } 
} 

if (xmlhttp.readyState==4){ 
    // 4 = "loaded" 
    if (xmlhttp.status==200) 
    {// 200 = "OK" 
    document.getElementById('T1').innerHTML= result + "\nreadyState = 4, DONE"; 
    } 
} 
} 

这里是我的Perl代码

#!C:/perl/bin/perl.exe 

use strict; 
use warnings; 
use CGI; 

$|++; 

my $cgi = CGI->new; 

print $cgi->header, 
     $cgi->start_html("Output Flush Buffer Test"); 

for (1..3) { 
    print $cgi->p("Line $_"); 
    sleep 1; 
} 

print $cgi->end_html; 

结果表明在IE7

undefined readyState = 4, DONE 

结果在Firefox中显示

readyState = 3, counting begins 

Line 1 

Line 2 

Line 3 
readyState = 4, DONE 

我得到了一些建议,IE7不支持MIME,这就是为什么IE7无法使用状态更改刷新输出的原因,这是真的吗?如果我直接从IE7浏览器运行这个perl脚本,例如本地主机/ cgi-bin/count.pl,IE7将逐行显示结果并延时。它只是不适用于AJAX。

请有人帮我解决这个问题,或者建议我一个更好的方法来做到这一点。

+0

检查您打印readyState 4的同一个块中的响应文本。 – 2010-02-11 16:41:05

回答

0

有刷新在IE7的输出,我讨厌做 1.标准输出输出到在Perl 2.一个日志文件,当阿贾克斯开始调用次数,就会有另一个JavaScript调用日志文件的替代方式在屏幕上打印文本。