【问题标题】:Ajax request not receiving xml from DjangoAjax 请求未从 Django 接收 xml
【发布时间】:2010-01-16 23:57:23
【问题描述】:

我有一个 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 时看到的条目:

[2010 年 1 月 16 日 17:34:10] “获取 /galleryimages/Web HTTP/1.1" 200 215

这是我进行 AJAX 调用时服务器日志中的条目:

[2010 年 1 月 16 日 17:36:19] “选项 /galleryimages/Web HTTP/1.1" 200 215

为什么 AJAX 请求没有得到我的 Django 页面正在服务的 xml?

【问题讨论】:

  • 当 jQuery 的 load 被设计为接收 HTML 并且看起来确实是 HTML你在发送?我怀疑这是导致那个奇怪的 HTTP OPTIONS 请求的原因,因此是你的问题,但它肯定无济于事,只会使问题复杂化到没有好的结果(浏览器被设计成非常容忍不良数据,所以它不好测试数据在其中一个中是否可见;-)。
  • 啊,谢谢!这可能是让它发挥作用的第一步。我已将 mimetype 更改为 text/html,但不幸的是,ajax 请求仍然作为 OPTIONS 方法出现并且它没有收到任何内容。
  • 去掉整个 mimetype 部分还能用吗?

标签: jquery ajax django http-method


【解决方案1】:

您要指定mimetype='application/xml'

【讨论】:

    【解决方案2】:

    问题是 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/

    【讨论】:

      猜你喜欢
      • 2013-12-30
      • 2011-03-01
      • 2013-03-11
      • 2015-02-02
      • 1970-01-01
      • 2015-05-07
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      相关资源
      最近更新 更多