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?

+0

为什么指定你发送XML(然后发送一个不正确的XML文档,一个缺乏顶层元素),当jQuery的'load'被设计为接收HTML和它它似乎是你发送的HTML?我怀疑这是造成这个奇怪的HTTP OPTIONS请求的原因,也就是你的问题,但它确实无法帮助,并且使问题复杂化到没有好的结果(浏览器被设计为非常容忍不良数据,所以它不好测试数据在其中一个中是否可见;-)。 – 2010-01-17 00:05:05

+0

啊谢谢!这可能是第一步让这个工作。 我已经将mimetype更改为text/html,但不幸的是,ajax请求仍然作为OPTIONS方法出现,并且它没有收到任何内容。 – ampersandre 2010-01-17 00:22:30

+0

如果你拿出整个mimetype部分,它是否工作? – 2010-03-16 13:29:53

问题是,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'