2012-06-06 39 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