Ajax请求没有从Django接收xml
我有一个Django服务器,它处理对URL的请求,该URL将返回一些用于图像库的HTML。我可以导航到URL并且浏览器将显示返回的HTML,但是我无法通过对相同的URL执行AJAX调用(使用jQuery)来获取相同的HTML。Ajax请求没有从Django接收xml
这是产生响应的观点:
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 /月/ 2010 17时34分10秒]“ GET /galleryimages /网络HTTP/1.1" 200 215
这是因为当我做AJAX调用服务器日志条目:
[16 /月/ 2010 - 17:36: 19]“选项 /galleryimages/Web HTTP/1.1“200 215
为什么AJAX请求不能获取我的Django页面正在提供的xml?
问题是,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/)
你想指定mimetype='application/xml'
。
为什么指定你发送XML(然后发送一个不正确的XML文档,一个缺乏顶层元素),当jQuery的'load'被设计为接收HTML和它它似乎是你发送的HTML?我怀疑这是造成这个奇怪的HTTP OPTIONS请求的原因,也就是你的问题,但它确实无法帮助,并且使问题复杂化到没有好的结果(浏览器被设计为非常容忍不良数据,所以它不好测试数据在其中一个中是否可见;-)。 – 2010-01-17 00:05:05
啊谢谢!这可能是第一步让这个工作。 我已经将mimetype更改为text/html,但不幸的是,ajax请求仍然作为OPTIONS方法出现,并且它没有收到任何内容。 – ampersandre 2010-01-17 00:22:30
如果你拿出整个mimetype部分,它是否工作? – 2010-03-16 13:29:53