2010-01-16 5 views
0

У меня есть сервер Django, который обрабатывает запросы на URL, который будет возвращать некоторые HTML для использования в галерее изображений. Я могу перейти к URL-адресу, и браузер отобразит возвращаемый HTML-код, но я не могу получить тот же HTML, выполнив вызов AJAX (используя jQuery) с тем же URL-адресом.Ajax запрос не получает XML из Django

Это мнение, что генерирует ответ:

def gallery_images(request, gallery_name): 
    return render_to_response('galleryimages.html', {'images': get_images_of_gallery(gallery_name)}, mimetype='text/xml') 

Это 'galleryimages.html' Шаблон:

{% for image in images %} 
<div id="{{image.name}}big"> 
    <div class="actualImage" style="background-image:url({{image.image.name}});"> 
     <h1>{{image.caption|safe}}</h1> 
    </div> 
</div> 
{% endfor %} 

Это JQuery называют творю:

$("#allImages").load("http://localhost:8000/galleryimages/Web");

Однако, это не загружает ничего в моих #allImages дела. Я использовал firebug и запускал jQuery-метод Ajax .get («http://localhost:8000/galleryimages/Web»), и firebug говорит, что текст ответа полностью пуст.

Когда я просматриваю журнал сервера Django, это запись я вижу, когда я перейти к URL вручную, через мой браузер:

[16/Jan/2010 17:34:10] " GET /galleryimages/Web HTTP/1.1" 200 215

Это запись в журнале сервера, когда я делаю вызов AJAX:

[16/Jan/2010 17:36: 19] "ОПЦИИ /galleryimages/Web HTTP/1.1 "200 215

Почему запрос AJAX не получает XML-страницу, на которой работает моя страница Django?

+0

Почему указать вы отправляете XML (а затем отправить неверный документы XML, один недостаток элемента верхнего уровня), когда 'load' JQuery разработан, чтобы получить HTML, и это делает Кажется, что это HTML, который вы отправляете? Я сомневаюсь, что отвечает за этот странный HTTP 'запроса OPTIONS', и, таким образом, вашу проблему, но это, конечно, не может помочь, и только усложняет проблему ни к чему хорошему концу (браузеры предназначены для невероятно терпимы плохих данных, так что это не хорошо проверьте, что данные видны в одном из них ;-). –

+0

Ах спасибо! Это, вероятно, шаг 1, чтобы заставить это работать. Я изменил mimetype на text/html, но, к сожалению, запрос ajax по-прежнему появляется как метод OPTIONS, и он ничего не получает. – ampersandre

+0

работает, если вы вынимаете всю часть mimetype? –

ответ

0

Проблема заключалась в том, что JQuery замечал, что URL-адрес, который я запрашивал, был в другом домене, и в попытке остановить междоменные скрипты преобразовал мой запрос GET в запрос OPTION.

Решение этой проблемы было написать PHP-страницу, которая будет принимать URL в качестве параметра запроса, и отправить запрос AJAX на этот прокси-страницы PHP. Страница прокси-сервера удалит URL-адрес, который я передал, и отправьте его обратно.

(см здесь: http://www.abdulqabiz.com/blog/archives/2007/05/31/php-proxy-script-for-cross-domain-requests/)

0

Вы хотите указать mimetype='application/xml'.