2012-06-06 45 views
0

我遇到了下面的代碼問題,每當我嘗試從網站請求JSON數據時,我總是會收回響應代碼0.有人知道爲什麼?如果我要去網站,只需輸入正確的登錄信息即可獲得數據。響應代碼0從網站獲取JSON

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <title></title> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
    <script src="Base64.js" type="text/javascript"></script> 
    <script type="text/javascript"> 

     function alertContents(HTTPobj) { 

      if (HTTPobj.readyState == 4) { 
       // everything is good, the response is received 
       if ((HTTPobj.status == 200) || (HTTPobj.status == 0)) { 
        // FIXME: perhaps a better example is to *replace* some text in the page. 
        var htmlDoc = document.createElement('div'); // Create a new, empty DIV node. 
        htmlDoc.innerHTML = HTTPobj.responseText; // Place the returned HTML page inside the new node. 
        alert("The response was: " + HTTPobj.status + HTTPobj.responseText); 
        //var jsonData = eval('(' + HTTP.responseText + ')'); 
        //parseJson(HTTP.responseText); 

       } 
       else { 
        alert('There was a problem with the request. ' + HTTPobj.status + HTTPobj.responseText); 
       } 
      } 
     } 


     } 

     function makeBaseAuth(user,password) { 
      var tok = user + ':' + password; 
      var hash = Base64.encode(tok); 
      alert(hash); 
      return "Basic " + hash; 
     } 

     function getInput() { 

      var getUser = document.input.user.value; 
      var getPass = document.input.pass.value; 
      var logData = makeBaseAuth(getUser, getPass); 
      var url = 'http://www.tt-galaxi.com/thubrest/login'; 
      // var url = 'http://www.tt-galaxi.com/thubrest/users/%@/trips',username; 
      // var url = 'http://www.tt-galaxi.com/thubrest/parkingbays'; 
      var HTTPobj = new XMLHttpRequest(); 
      HTTPobj.onreadystatechange = function() { alertContents(HTTPobj); }; 
      var test = HTTPobj.open('GET', url); 
      HTTPobj.setRequestHeader('Authorization', logData); 
      HTTPobj.send(); 

     } 



    </script> 
    </head> 
    <body> 

    <form name="input" action=""> 
    Username: <input type="text" name="user" /> 
    <br /> 
    Password:<input type="text" name="pass" />  
    <br /> 
    <input id="Button1" type="button" value="Submit" onclick="getInput()"/> 
    </form> 
    </body> 
    </html> 
+0

你使用什麼瀏覽器?控制檯上是否有錯誤? –

+0

我不是純粹的javascript,但是如果你使用jQuery的post功能,它會讓你的生活更輕鬆 – evilReiko

+0

我已經試過IE,FF,Chrome,Opera,它們都給出了相同的響應代碼。我認爲這與相同的原產地政策有關,但是我對如何解決這個問題沒有想法。 – sutoL

回答

0

看起來你試圖從一個不同於你的來源的主機請求數據。詳細說明一下,如果您有一個名爲www.example.com的網站在主機A中運行,並且您嘗試向運行在主機B中的wwww.somethingelse.com發出請求,則您將無法從主機B獲取數據,因爲大多數現代瀏覽器強制執行禁止以跨站點方式使用AJAX請求的same origin policy。如果瀏覽器檢測到這種「非法請求」,它將阻止來自該不同主機的傳入數據。

但是,如果您擁有其他主機,則可以明確地將標頭傳遞給瀏覽器,該瀏覽器基本上會通知瀏覽器允許來自該其他主機的跨站點數據。閱讀更多關於這個here

+0

嗨,謝謝,無論如何要禁用這個,因爲我可以肯定這個其他主機是可靠的。另外我不擁有其他主機。此網站將通過手機訪問。 – sutoL