Ajax междоменная ошибка - PullRequest
       22

Ajax междоменная ошибка

0 голосов
/ 20 декабря 2011

Я сталкиваюсь с этой проблемой:

У меня есть сервер django (python), который обслуживает XML-файлы на локальном хосте: 8000

У меня есть проект liferay, использующий tomcat на localhost: 8080, который должен вызывать эти XML-файлы (в javascript с ajax)

Он вызывает файлы, но никогда их не получает.

Что мне нужно сделать, чтобы tomcat получил этот файл?

Спасибо заранее.

Edit:

вот мой запрос:

$.ajax({
      type: 'GET',
      url: "http://127.0.0.1:8000/charger/entreprise/",
      dataType: "xml",
      crossDomain : true,
      success: function(xml){
            alert(xml);
        }
    });

вот мой заголовок запроса:

Host    127.0.0.1:8000
User-Agent  Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0
Accept  application/json, text/javascript, */*; q=0.01
Accept-Language fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection  keep-alive
Referer http://localhost:8080/web/guest/home
Origin  http://localhost:8080

На самом деле, мне интересно, если проблема в javascript, я думаю, что это из-за серверов.

Попробовав много неработающих решений, я наконец решил свою проблему Вы, ребята, были правы, JSONP был решением, даже если бы мне пришлось адаптировать его к django, и моей конкретной проблеме, которая была непростой.

Ответы [ 4 ]

2 голосов
/ 20 декабря 2011

Вы должны использовать JSONP (JSON Padding) для выполнения междоменных запросов AJAX.}

Обратитесь по этой ссылке для получения информации о JSONP

http://www.ibm.com/developerworks/library/wa-aj-jsonp1/

И jquery также имеет функцию JSONP.Проверьте это в документации jquery

1 голос
/ 20 декабря 2011

Как уже упоминалось, JSONP решит вашу проблему.Он позволяет использовать междоменную функциональность AJAX.

Альтернативой является использование веб-сервера перед вашим сайтом Django и сайтом Tomcat и его запросы на прокси.Например, ваш основной сайт работает на localhost: 80 и, основываясь на URL-адресах, передает его на соответствующий внутренний сервер.Таким образом, с точки зрения клиента и JavaScript запросы HTML и JSON направляются на один и тот же сервер.

1 голос
/ 20 декабря 2011

Если кросс-доменный ajax - ваша единственная проблема, вы можете сделать это с помощью JSONP .

В различных JS-инфраструктурах это уже реализовано (например, ищите параметр 'crossDomain' для JQueryAJAX )

Попробуйте установить dataType: "jsonp xml" для вашего запроса AJAX.

1 голос
/ 20 декабря 2011

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

...