2014-12-03 2 views
0

Не могли бы вы помочь мне интегрировать этот ajax code в цикл for?Запросы Ajax с использованием цикла

Я пытаюсь получить href из элементов с помощью класса «ссылки», а затем использовать их , чтобы сделать httpRequests.
Я видел с firebug, что httpRequests отсылаются, и я думаю, что проблема в функции alertContents немного. Я боролся весь день, но никакого результата.

<a class="links" href="/1">Link1</a> 
<a class="links" href="/2">Link2</a> 
<a class="links" href="/3">Link3</a> 

<script> 
for(var i = 0; i < 2; i++) { 
makeRequest(document.getElementsByClassName("links")[i].href); 
} 

function makeRequest(url) { 
if (window.XMLHttpRequest) { // Mozilla, Safari, ... 
    httpRequest = new XMLHttpRequest(); 
} else if (window.ActiveXObject) { // IE 
    try { 
    httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
    } 
    catch (e) { 
    try { 
     httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    catch (e) {} 
    } 
} 

if (!httpRequest) { 
    alert('Giving up :(Cannot create an XMLHTTP instance'); 
    return false; 
} 
httpRequest.onreadystatechange = alertContents; 
httpRequest.open('GET', url); 
httpRequest.send(); 
} 

function alertContents() { 
if (httpRequest.readyState === 4) { 
    if (httpRequest.status === 200) { 
    alert(httpRequest.responseText); 
    // here i get the final value of the variable i 
    } else { 
    alert('There was a problem with the request.'); 
    } 
} 
} 
</script> 
+0

глобальные переменные являются началом вашей проблемы. – epascarello

+0

@epascarello, у вас есть время, чтобы объяснить мне? – Marian07

+0

httpRequest = новый XMLHttpRequest(); <- глобальный, каждый цикл перезаписывается. 'XMLHttpRequest' является асинхронным, он не ждет. Следовательно, почему у вас есть проблемы. – epascarello

ответ

0

Я объявила переменную так, чтобы она не была глобальной и переместила вашу функцию обратного вызова внутри функции makeRequest.

for (var i = 0; i < 2; i++) { 
    makeRequest(document.getElementsByClassName("links")[i].href); 
} 

function makeRequest(url) { 

    var httpRequest; 

    function alertContents() { 
     if (httpRequest.readyState === 4) { 
      if (httpRequest.status === 200) { 
       alert(httpRequest.responseText); 
       // here i get the final value of the variable i 
      } else { 
       alert('There was a problem with the request.'); 
      } 
     } 
    } 

    if (window.XMLHttpRequest) { // Mozilla, Safari, ... 
     httpRequest = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { // IE 
     try { 
      httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try { 
       httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e) {} 
     } 
    } 

    if (!httpRequest) { 
     alert('Giving up :(Cannot create an XMLHTTP instance'); 
     return false; 
    } 
    httpRequest.onreadystatechange = alertContents; 
    httpRequest.open('GET', url); 
    httpRequest.send(); 

} 
+0

Я получаю 3 раза ответText с одного URL-адреса. – Marian07

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