2015-02-07 3 views
1

План прост, javascript отправляет ajax GET запрос в файл 'localhost/test/php/test.php? A ='. Файл test.php просто повторяет ошибку $ _GET ['a']. Ответ Ajax затем используется как некоторый внутренний divHTML div.ajax call не работает propely в 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

Я не думаю, что вы можете использовать один и тот же объект XMLHttpRequest для нескольких невыполненных запросов. Вы должны каждый раз создавать новый XHR через цикл. – Barmar

+3

Я не видел, как в течение многих лет раздавался призыв AJAX. –

+0

просто положил ajax var внутри цикла, но по-прежнему не имеет сделки, по сути, теперь он даже не отображает ответ ajax. @LG_PDX по какой-то причине мне просто не нравится jQuery :) – brunobliss

ответ

1

Вы должны создавать новый 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.responseText к this.responseText. В обратном вызове ajax будет последним созданным XHR, а не тем, на который этот ответ ссылается, из-за Javascript infamous Loop issue?

+0

в порядке! Это сделало трюк для CHROME (IE11 все еще сломан ... * sigh *) Но я также удалил false в вызове ajax. Я думал, что мне придется подождать, пока запрос закончится, чтобы увидеть, как меняются цифры, так получилось, что все прошло иначе: D – brunobliss

Смежные вопросы