Pregunta sobre javascript – código de respuesta 0 obteniendo JSON de un sitio web

0

Estoy teniendo un problema con el siguiente código, siempre que intentaría solicitar los datos JSON del sitio web, siempre obtendría un código de respuesta 0. ¿Alguien sabe por qué? Si tuviera que ir al sitio web, obtendría los datos con solo ingresar la información de inicio de sesión correcta.

<!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>
He intentado IE, FF, Chrome, Opera, todos están dando el mismo código de respuesta. Pienso que está relacionado con la misma política de origen, sin embargo, no tengo una idea de cómo trabajar en ello. sutoL
estoy ejecutando el código anterior de mi máquina local alojada en IIS 7.0, ¿eso constituye un dominio cruzado? sutoL
¿Qué navegador estás usando? ¿Y hay algún error en la consola? Subir Kumar Sao
No podrá hacer este dominio cruzado, así que sí, ese es probablemente el problema. Tendrá que representarlo de forma local (con un script de servidor que realice la consulta como un recurso local) o usar una interfaz JSONP (si el punto final lo admite). Hamish
No estoy en javascript puro, pero si usas la función de publicación de jQuery, te hará la vida mucho más fácil evilReiko

Tu respuesta

2   la respuesta
0

gen diferente al suyo. Para elaborar esto, si tiene un sitio llamado www.example.com ejecutándose en el host A e intenta realizar una solicitud a wwww.somethingelse.com ejecutándose en el host B, no podrá obtener los datos del host B porque la mayoría de los navegadores modernos hacen cumplir lapolítica del mismo origen que prohíbe el uso de la solicitud AJAX en forma cruzada. Si el navegador detecta este tipo de "solicitud ilegal", bloquea los datos entrantes de ese host diferente.

Sin embargo, si es el propietario de ese otro host, puede pasar explícitamente un encabezado al navegador que básicamente le dice al navegador que permita los datos entre sitios de ese otro host. Lea más sobre estoaquí.

hola, gracias, de todas formas hay que deshabilitar esto porque puedo estar seguro de que este otro host sería confiable. También no soy dueño del otro host. Y este sitio web se puede acceder a través de teléfonos móviles. sutoL

Preguntas relacionadas