Вопрос по javascript – код ответа 0 получение JSON с сайта

0

У меня проблема с приведенным ниже кодом, всякий раз, когда я пытаюсь запросить данные JSON с веб-сайта, я всегда получаю код ответа 0. Кто-нибудь знает почему? Если бы я пошел на сайт, я бы получил данные, просто введя правильную информацию для входа.

<!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>
Вы не сможете сделать это кросс-домен, так что да, это, вероятно, проблема. Вам нужно будет либо проксировать его локально (с помощью серверного скрипта, который выполняет запрос как локальный ресурс), либо использовать интерфейс JSONP (если конечная точка поддерживает это). Hamish
Какой браузер вы используете? И есть ли ошибка на консоли? Subir Kumar Sao
Я запускаю приведенный выше код с моей локальной машины, размещенной на IIS 7.0, это означает, что это междоменный домен? sutoL
Я пробовал IE, FF, Chrome, Opera, все они дают одинаковый код ответа. Я думаю, что это связано с той же политикой происхождения, однако я не знаю, как с ней работать. sutoL
Я не люблю чистый JavaScript, но если вы используете функцию публикации jQuery, это сделает вашу жизнь намного прощ evilReiko

Ваш Ответ

2   ответа
0

что вы пытаетесь запросить данные с хоста, который имеет другое происхождение, чем у вас. Чтобы уточнить это, если у вас есть сайт www.example.com, работающий на хосте A, и вы пытаетесь сделать запрос к wwww.somethingelse.com, работающему на хосте B, вы не сможете получить данные с хоста B, потому что большинство современных браузеров применяют одни и те же политики происхождения, который запрещает использование AJAX-запроса в межсайтовом режиме. Если браузер обнаруживает этот «незаконный запрос», он блокирует входящие данные с другого хоста.

Однако, если вы владеете этим другим хостом, вы можете явно передать заголовок браузеру, который в основном говорит браузеру разрешить межсайтовые данные с этого другого хоста. Подробнее об этомВо.

hi, спасибо, есть в любом случае отключить это, потому что я могу быть уверен, что этот другой хост будет надежным. Также я не являюсь владельцем другого хоста. И этот сайт должен быть доступен с помощью мобильных телефонов. sutoL
0

Похожие вопросы