2013-07-27 83 views
1

我已經閱讀了很多如何嘗試並行地創建兩個xmlhttprequest,但看起來有些東西不起作用。
我有1個PHP文件。其中包括2個.js文件。
第一次每3秒運行xmlhttprequest
我希望第二個按需運行,但每當我觸發它,它將返回狀態4,但responseText始終是空的。 (這個PHP文件毫無疑問地打印出來了,我甚至試圖穿上PHP文件window.open('1')來查看文件是否被調用,而不是)。第二次調用兩個xmlhttprequest不起作用

這裏是第一JS:

var req1 = createXMLHttpRequest2(); 

變種user_redirected = FALSE;

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空的responseText。

謝謝。

+0

你確定的PHP呼應的東西嗎?如果您使用相同的參數手動打開URL,會發生什麼情況? – dievardump

+0

我確定,進一步的模式中,我使用'test.php'切換'delete_waiting_games_for_username.php',它只使用JS打開頁面,並且頁面未打開。 – SagiLow

+0

嘗試在window.open上使用alert()。看看你看到的是什麼 – 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); 
相關問題