Проблема AJAX - Нет текста ответа в FireFox, но нормально в IE - PullRequest
1 голос
/ 07 июня 2010

Я делаю простой вызов AJAX на внешний сайт. В IE все работает нормально, но в Firefox не возвращается текст ответа.

Я думаю, что это как-то связано с тем, что ответ "кусается", но я не уверен.

Есть идеи? Спасибо.

<html>
<head>
    <script type="text/javascript" charset="utf-8">
        function loadXMLDoc() {
            var xmlhttp;
            var urlString = "http://drc.edeliver.com.au/ratecalc.asp?Pickup_Postcode=6025&Destination_Postcode=6055&Country=AU&Weight=100&Service_Type=STANDARD&Length=100&Width=100&Height=100&Quantity=2";
            if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
            } else {// code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange=function() {
                if (xmlhttp.readyState==4) {
                    window.alert(xmlhttp.responseText);
                }
            }
            xmlhttp.open("GET", urlString, true);
            xmlhttp.send();
        }
    </script>
</head>
<body>
    <span onclick="loadXMLDoc()">Click Me</span>
</body>
</html>

Ответы [ 5 ]

4 голосов
/ 07 июня 2010

Ваша страница также размещена на http://drc.edeliver.com.au?Если нет, то вы не можете сделать XMLHttpRequest для этого URL.Это нарушение базовой безопасности браузера, которая для ваших тестов IE, вероятно, подавляется явной конфигурацией браузера.

edit - я думаю, что IE разрешает "локальную зону безопасности" (или что-то ещеназывать это) сойти с рук вещи, которые не допускаются для страниц зоны "Интернет".

2 голосов
/ 07 июня 2010

Возможно, вы захотите попробовать использовать относительный URL-адрес в urlString, чтобы избежать проблем с Одинаковой политикой происхождения .


ОБНОВЛЕНИЕ: В дополнение к комментариям, если JSONP не вариант, вы также можете настроить простой обратный прокси , чтобы обойти тот же источник политика. Вы можете использовать mod_proxy , если вы используете Apache. Это позволит вам использовать относительные пути в вашем AJAX-запросе, в то время как HTTP-сервер будет действовать как прокси для любого «удаленного» местоположения.

Основная директива конфигурации для настройки обратного прокси в mod_proxy - это ProxyPass. Обычно вы используете его следующим образом:

ProxyPass     /remote/     http://drc.edeliver.com.au/

В этом случае браузер сможет запросить /remote/ratecalc.asp, но сервер будет выполнять эту функцию, выступая в качестве прокси для http://drc.edeliver.com.au/ratecalc.asp, в то время как браузер будет выглядеть так, как будто он обслуживается из того же источника.

1 голос
/ 07 июня 2010

Да, проблема может быть связана с частичным ответом (потоковая передача COMET):

http://blogs.msdn.com/b/ieinternals/archive/2010/04/06/comet-streaming-in-internet-explorer-with-xmlhttprequest-and-xdomainrequest.aspx

Поскольку потоковая передача по-прежнему связана со многими проблемами (например, при использовании прокси-серверов), моей текущей рекомендацией будет вместо этого использовать длинный опрос (закрытие ответа для каждого чанка и немедленная выдача нового запроса). Это неудачная ситуация - я бы тоже предпочел использовать потоковую передачу.

Редактировать

Мы выяснили, что на самом деле это не проблема!

0 голосов
/ 02 августа 2010

Для междоменного запроса посмотрите эту статью .

Возможно, вам потребуется включить следующие заголовки, чтобы он работал в FF / Chrome:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
0 голосов
/ 07 июня 2010

Я считаю, что проблема заключается в простом междоменном обеспечении безопасности.

Я пытаюсь сделать AJAX-вызов с локальной статической HTML-страницы на внешний URL-адрес.

IE позволяет мне сделать это. Firefox не позволяет мне это делать.

Firefox не выдает сообщение об ошибке (как при междоменном доступе к iFrame DOM). Текст ответа просто пуст.

Спасибо всем за вашу помощь. Извините, что опубликовал такой дремучий вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...