Frage an javascript – Antwortcode 0 JSON von einer Website abrufen

0

Ich habe ein Problem mit dem folgenden Code. Wenn ich versuche, die JSON-Daten von der Website anzufordern, erhalte ich immer einen Antwortcode 0. Weiß jemand, warum? Wenn ich auf die Website gehen würde, würde ich die Daten nur durch Eingabe der richtigen Anmeldeinformationen erhalten.

<!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>
Ich mag kein reines Javascript, aber wenn Sie die Post-Funktion von jQuery verwenden, wird dies Ihr Leben viel einfacher machen evilReiko
Welchen Browser benutzen Sie? Und gibt es einen Fehler in der Konsole? Subir Kumar Sao
Sie werden diese domänenübergreifende Aktion nicht ausführen können. Ja, das ist wahrscheinlich das Problem. Sie müssen ihn entweder lokal per Proxy übertragen (mit einem Serverskript, das die Abfrage als lokale Ressource ausführt) oder eine JSONP-Schnittstelle verwenden (sofern der Endpunkt dies unterstützt). Hamish
Ich habe versucht, IE, FF, Chrome, Opera, sie geben alle den gleichen Antwortcode. Ich denke, es hängt mit der gleichen Ursprungspolitik zusammen, aber ich habe keine Ahnung, wie ich daran arbeiten soll. sutoL
Ich führe den obigen Code von meinem lokalen Computer aus, der auf IIS 7.0 gehostet wird. Stellt dies eine domänenübergreifende Verbindung dar? sutoL

Deine Antwort

2   die antwort
0

Daten von einem Host anzufordern, dessen Herkunft sich von Ihrer unterscheidet. Wenn auf Host A eine Website mit dem Namen www.example.com ausgeführt wird und Sie versuchen, eine Anfrage an www.somethingelse.com zu senden, die auf Host B ausgeführt wird, können Sie die Daten nicht von Host B abrufen, da Die meisten modernen Browser erzwingen diegleiche Herkunftspolitik Dies verbietet die Verwendung von AJAX-Anfragen auf standortübergreifende Weise. Wenn der Browser diese Art von "unzulässiger Anforderung" erkennt, blockiert er die eingehenden Daten von diesem anderen Host.

Wenn Sie jedoch diesen anderen Host besitzen, können Sie dem Browser explizit einen Header übergeben, der den Browser anweist, standortübergreifende Daten von diesem anderen Host zuzulassen. Lesen Sie mehr darüberHier.

Hallo, danke, gibt es sowieso, um dies zu deaktivieren, weil ich sicher sein kann, dass dieser andere Host zuverlässig wäre. Ich besitze auch nicht den anderen Host. Und auf diese Website soll über Mobiltelefone zugegriffen werden. sutoL

Verwandte Fragen