2015-02-07 129 views
1

计划很简单,javascript向文件'localhost/test/php/test.php?a ='发送ajax GET请求。 test.php文件简单回响$ _GET ['a']回来。然后将Ajax响应用作某些div的innerHTML。ajax调用在IE11和chrome中不能正常工作

这美丽workfs如预期的Firefox,但在Chrome和IE11它只是加载在循环的最后一次迭代的页面:

HTML

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv='Content-Type' content='Type=text/html; charset=utf-8'> 
     <meta charset="UTF-8"> 
     <link rel="stylesheet" href="css/style.css" /> 
    </head> 
    <body> 
     Text will appear here: 
     <div></div> 
     <script src="js/script.js"></script> 
    </body> 
</html> 

的Javascript

window.onload = function() { 
    test.init(); 
}; 

var test = { 
    init: function() { 
     var ajax = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); 
     for (var a = 0 ; a < 100 ; a++) { 
      ajax.open('GET','php/test.php?a='+a,false); 
      ajax.send(); 
      ajax.onreadystatechange = function() { 
       if (this.status == 200 && this.readyState == 4) { 
        var div = document.getElementsByTagName('div'); 
        div[0].innerHTML = ajax.responseText; 
       } 
      }; 
     } 
    } 
}; 

PHP

<?php 
$a = $_GET['a']; 

echo $a; 
?> 

我需要更改哪些内容才能在IE和Chrome上完成这项工作?

+0

将回调中ajax为最后创建的XHR,而不是此回复所引用的XHR。我不认为您可以对多个未完成的请求使用相同的“XMLHttpRequest”对象。您需要每次循环制作新的XHR。 – Barmar 2015-02-07 01:19:12

+3

我几年没见过手卷AJAX电话了! – 2015-02-07 01:19:28

+0

只是将ajax var放入循环中,但仍然没有处理,事实上,现在它甚至不显示ajax响应。 @LG_PDX由于某种原因,我只是不喜欢jQuery :) – brunobliss 2015-02-07 01:22:17

回答

1

您应该每次在循环中创建一个新的XHR,而不是重复使用同一个XHR。

var test = { 
    init: function() { 

     for (var a = 0 ; a < 100 ; a++) { 
      var ajax = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); 
      ajax.open('GET','php/test.php?a='+a,false); 
      ajax.send(); 
      ajax.onreadystatechange = function() { 
       if (this.status == 200 && this.readyState == 4) { 
        var div = document.getElementsByTagName('div'); 
        div[0].innerHTML = this.responseText; 
       } 
      }; 
     } 
    } 
}; 

请注意,我也改变ajax.responseTextthis.responseText。在回调中,由于Javascript infamous Loop issue?

+0

好吧!这对CHROME(IE11仍然是坏掉的...... *叹息*)的窍门,但我也删除了在Ajax调用中的错误。我想我必须等待请求完成才能看到数字发生变化,恰恰相反,这完全是另一种方式:D – brunobliss 2015-02-07 01:28:58

相关问题