Pergunta sobre javascript – código de resposta 0 obtendo JSON de um site

0

Eu estou tendo um problema com o código abaixo, sempre que eu iria tentar solicitar os dados JSON do site, eu sempre receber de volta um código de resposta 0. Alguém sabe por quê? Se eu fosse para o site eu iria obter os dados apenas inserindo as informações de login corretas.

<!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>
Eu tentei IE, FF, Chrome, Opera, todos eles estão dando o mesmo código de resposta. Estou a pensar que está relacionado com a mesma política de origem, no entanto, não tenho uma ideia sobre como trabalhar nela. sutoL
Eu não estou no javascript puro, mas se você usar a função post do jQuery, isso tornará sua vida muito mais fácil evilReiko
Estou executando o código acima da minha máquina local hospedada no IIS 7.0, isso constitui para cruzar o domínio? sutoL
Qual navegador você está usando? E há algum erro no console? Subir Kumar Sao
Você não poderá fazer este domínio cruzado, então sim, esse é provavelmente o problema. Você precisará procurá-lo localmente (com um script de servidor que executa a consulta como um recurso local) ou usar uma interface JSONP (se o ponto de extremidade for compatível). Hamish

Sua resposta

2   a resposta
0

erente da sua. Para elaborar isso, se você tiver um site chamado www.example.com em execução no host A e tentar fazer uma solicitação para wwww.somethingelse.com em execução no host B, não conseguirá obter os dados do host B porque navegadores mais modernos impor omesma política de origem que proíbe o uso de solicitações AJAX de maneira intersite. Se o navegador detectar esse tipo de "solicitação ilegal", ele bloqueará os dados de entrada desse host diferente.

No entanto, se você possui esse outro host, pode explicitamente passar um cabeçalho para o navegador, o que basicamente diz ao navegador para permitir dados entre sites desse outro host. Leia mais sobre issoAqui.

Oi, obrigado, existe alguma maneira de desativar isso, porque eu posso ter certeza que este outro host seria confiável. Também não possuo o outro host. E este site deve ser acessado via telefones celulares. sutoL

Perguntas relacionadas