Я получаю ошибку управления доступом

#jquery #jquery-xml

#jquery #jquery-xml

Вопрос:

Почему я получаю эту ошибку при попытке прочитать удаленный XML-канал?

 XMLHttpRequest cannot load http://www.companyname.com/external.php?type=xml. Origin http://intranet is not allowed by Access-Control-Allow-Origin.
  

Это скрипт, который я использую, чтобы попытаться получить XML-файл:

 $(document).ready(function() {
    get_xml_feed();

    function get_xml_feed() {
        $.ajax({
            url: 'http://www.companyname.com/external.php?type=xml',
            type: 'GET',
            dataType: 'xml',
            error: function(xhr, status, error) {
                console.log(status);
                console.log(xhr.responseText);
            },
            success: function(xml) { 
                $(xml).find('items').each(function(){
                    var id = $(this).attr('guid');
                    var title = $(this).find('title').text();
                    var date = $(this).find('pubDate').text();
                    var url = $(this).find('link').text();

                    $('.divContent').empty().append(title   " - "   date   " - "   url   "<br />");
                });
            }
        });
    }
});
  

Ответ №1:

Потому что вы нарушаете ту же политику происхождения. Запросы AJAX могут быть отправлены только на URL, принадлежащие к тому же домену, на котором размещен ваш скрипт.

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

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

Комментарии:

1. JSONP — самый гениальный взлом в истории. 1

2. @Дарин Димитров, я не понимаю. Почему приложения, такие как Google Reader, могут получить доступ к этому XML-файлу, но я не могу получить к нему доступ с помощью jquery?

3. @oshirowanen, на каком домене размещен этот XML-файл?

4. XML-файл находится на моем веб-сайте, представьте, что это company.com . Я могу использовать Google Reader для чтения этого XML-файла. Но я не могу прочитать этот XML-файл из моей интрасети.

5. @oshirowanen, что заставляет вас думать, что Google Reader использует AJAX для извлечения этого канала? На самом деле это не так.