2013-07-27 2 views
1

Я читал много о том, как попытаться сделать два xmlhttprequest параллельно, но похоже, что что-то не совсем работает.
У меня есть 1 файл php. который включает в себя 2 файла .js.
Первые пробеги xmlhttprequest каждые 3 секунды.
Я хочу, чтобы второй запускался по требованию, но всякий раз, когда я его запускаю, он возвращается со статусом 4, но responseText всегда пуст. (PHP-файл печатает без всяких сомнений, я даже пытался наложить файл PHP только window.open('1'), чтобы увидеть, что файл вызывается, а его нет).Второй вызов из двух xmlhttprequest не работает

Вот первый JS:

var req1 = createXMLHttpRequest2(); 

вар user_redirected = ложь;

function createXMLHttpRequest2() { 
var ua2; 
if(window.XMLHttpRequest) { 
    try { 
    ua2 = new XMLHttpRequest(); 
    } catch(e) { 
    ua2 = false; 
    } 
} else if(window.ActiveXObject) { 
    try { 
    ua2 = new ActiveXObject("Microsoft.XMLHTTP"); 
    } catch(e) { 
    ua2 = false; 
    } 
} 
return ua2; 
} 

function set_user_redirected_false() { 
user_redirected = false; 
} 

function get_user_redirected() { 
return user_redirected; 
} 

function handleResponse(username, game_id, isInvitation) { 
    if(req1.readyState == 4 && req1.status==200) { 
     var response = req1.responseText; 
     if (response == "true") { 
      // Ask to set the game_accepted var to 1 (user is redirected and not leaving) 
      user_redirected = true; 
      if (isInvitation == "true") { 
       window.location.href = "game.php?game_id="+game_id+"&position=2"; 
      } else { 
       window.location.href = "game.php?game_id="+game_id+"&position=1"; 
      } 
     } 
     else { 
      setTimeout(function(){sendRequest();}, 3000); 
     } 
    } 
} 

function sendRequest() { 
    user_redirected = false; 
    var username = ""; 
    var game_id = -1; 
    var isInvitation = "false"; 
    username = document.getElementById("username").value; 
    game_id = document.getElementById("game_id").value; 
    isInvitation = document.getElementById("invitation").value; 
    if (isInvitation == "true") { 
     req1.open('GET', 'check_for_inviter.php?username='+username+'&game_id='+game_id ,true); 
    } else { 
     req1.open('GET', 'check_for_opponent.php?username='+username+'&game_id='+game_id,true); 
    } 
    req1.onreadystatechange = function(){handleResponse(username, game_id, isInvitation);}; 
    req1.send(null); 
} 

Это второй JS файл:

function createXMLHttpRequest() { 
    var ua; 
    if(window.XMLHttpRequest) { 
     try { 
      ua = new XMLHttpRequest(); 
     } catch(e) { 
      ua = false; 
     } 
    } else if(window.ActiveXObject) { 
     try { 
      ua = new ActiveXObject("Microsoft.XMLHTTP"); 
     } catch(e) { 
      ua = false; 
     } 
    } 
    return ua; 
} 

function delete_waiting_games(username) { 
    var req2 = createXMLHttpRequest(); 
    req2.open('GET', 'delete_waiting_games_for_username.php'); 
    req2.onreadystatechange = function(){ 
     window.open(req2.readyState+'&'+req2.responseText); 
    }; 
    req2.send(null); 
} 

Как вы можете видеть, я открыть новое окно, чтобы увидеть реакцию и состояние готовности (только для тестирования) и я всегда получаю статус 4 и пустой ответText.

Спасибо.

+0

вы уверены, что PHP эхо что-то? Что произойдет, если вы вручную откроете URL с теми же параметрами? – dievardump

+0

Я уверен, что в следующем режиме я переключил 'delete_waiting_games_for_username.php' на' test.php', который использует только JS, чтобы открыть страницу, и страница не открылась. – SagiLow

+0

попробуйте использовать alert() над window.open .. посмотрите, что вы видите – gezzuzz

ответ

0

Использование setTimeout для разделения вызовов и with для инкапсулирования XMLHTTPRequest:

function xhr() 
    { 
    with(new XMLHttpRequest) 
    { 
    open("GET",{},true); 
    setRequestHeader("Foo", "Bar"); 
    send(""); 
    onreadystatechange = handler; 
    } 
    } 

function handler(event) 
{ 
!!event.target && !!event.target.readyState && event.target.readyState === 4 && (console.log(event)); 
} 

setTimeout(xhr, 500); 
setTimeout(xhr, 1000); 
Смежные вопросы