Pytanie w sprawie javascript – kod odpowiedzi 0 uzyskiwanie JSON ze strony internetowej

0

Mam problem z poniższym kodem, gdy próbowałem zażądać danych JSON z witryny, zawsze otrzymałem kod odpowiedzi 0. Czy ktoś wie dlaczego? Gdybym miał wejść na stronę, dostałbym dane tylko przez wprowadzenie poprawnych danych logowania.

<!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>
Nie zajmuję się czystym javascriptem, ale jeśli użyjesz funkcji postów jQuery, to ułatwi ci życie evilReiko
Jakiej przeglądarki używasz? Czy jest jakiś błąd na konsoli? Subir Kumar Sao
Nie będziesz w stanie wykonać tej domeny krzyżowej, więc tak, to prawdopodobnie problem. Będziesz musiał albo proxy to lokalnie (za pomocą skryptu serwera, który wykonuje zapytanie jako zasób lokalny), albo użyj interfejsu JSONP (jeśli punkt końcowy to obsługuje). Hamish
korzystam z powyższego kodu z mojego komputera lokalnego hostowanego na IIS 7.0, czy to stanowi domenę krzyżową? sutoL
próbowałem IE, FF, Chrome, Opera, wszystkie one dają ten sam kod odpowiedzi. Myślę, że jest to związane z tą samą polityką pochodzenia, jednak nie mam pojęcia, jak to zrobić. sutoL

Twoja odpowiedź

2   odpowiedź
0

że próbujesz zażądać danych od hosta innego pochodzenia niż twoje. Aby to rozwinąć, jeśli witryna o nazwie www.example.com działa na hoście A i próbujesz wysłać żądanie do wwww.somethingelse.com działającego na hoście B, nie będzie można uzyskać danych z hosta B, ponieważ większość nowoczesnych przeglądarek wymuszapolityka tego samego pochodzenia które zabraniają używania żądania AJAX w trybie cross-site. Jeśli przeglądarka wykryje tego rodzaju „nielegalne żądanie”, blokuje przychodzące dane z tego innego hosta.

Jeśli jednak jesteś właścicielem tego innego hosta, możesz jawnie przekazać nagłówek do przeglądarki, która w zasadzie mówi przeglądarce, aby zezwalała na przesyłanie danych między lokacjami z tego innego hosta. Przeczytaj więcej na ten temattutaj.

Cześć, dzięki, czy i tak nie jest to możliwe, ponieważ mogę być pewien, że ten inny host będzie niezawodny. Również nie jestem właścicielem drugiego hosta. I ta strona internetowa ma być dostępna za pośrednictwem telefonów komórkowych. sutoL

Powiązane pytania