我有一个Django服务器,它处理对URL的请求,该URL将返回一些HTML以供在图库中使用。我可以导航到URL,浏览器将显示返回的HTML,但我无法通过对同一URL进行AJAX调用(使用jQuery)来获得相同的HTML。
这是生成响应的视图:
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 div中。我使用了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请求没有得到我的Django页面正在服务的xml?
答案 0 :(得分:0)
您想指定mimetype='application/xml'
。
答案 1 :(得分:0)
问题是JQuery注意到我请求的URL在另一个域上,并且为了阻止跨域脚本,将我的GET请求转换为OPTION请求。
解决方案是编写一个接受URL作为查询参数的PHP页面,并将AJAX请求发送到此PHP代理页面。代理页面将下拉我传入的URL并将其发回。
(见这里:http://www.abdulqabiz.com/blog/archives/2007/05/31/php-proxy-script-for-cross-domain-requests/)