如何在 django 中使用 Javascript 获取跨域数据?
Posted
技术标签:
【中文标题】如何在 django 中使用 Javascript 获取跨域数据?【英文标题】:How to get cross-domain data using Javascript in django? 【发布时间】:2011-10-03 08:33:51 【问题描述】:想象一下,您有两个域,并且您希望它们通过 javascript 机制进行交互。
所以,到目前为止,我所做的是在本地机器的不同端口上托管两台服务器。似乎请求正在从一台服务器发送到另一台服务器,只是它似乎没有返回任何数据。
你认为问题是什么?我该如何解决?
附:代码示例将不胜感激。谢谢。
【问题讨论】:
另外,如果我应该在问题中添加更多细节,请告诉我 试试jsonp。 【参考方案1】:我不了解 django,但其他域必须支持 CORS(请参阅 Wikipedia 和 the w3 spec)。
基本上,远程服务器必须支持Access-Control-Allow-Origin
标头。通常我只是让我的服务器将标头值设置为*
以允许所有来源访问数据。
您可能需要为您的特定网络服务器找到更具体的文档。您可能还想使用wireshark 观看服务器之间的对话。这是一个很棒的小实用程序,可用于了解您的 HTTP 请求/响应的实际情况...
【讨论】:
嘿任何想法,我怎样才能让 CORS 在我的 django 服务器上运行,或者如果我可以同时执行 CORS 和 JSONP 更好? CORS 是正确执行 JSONP 的方法。 JSONP 只是创建一个<script>
标记并加载内容,因为脚本标记不需要遵循相同的来源策略。 This page 有关于在 django 中设置 HTTP 标头的信息。不过我真的不太了解,我用的是node.js,那里超级简单。
我也不能通过某种方式使用隐藏的 iframe 来解决这个问题吗?
Ew。只需学习如何使用 CORS。这真的没那么难。您所要做的就是确保使用 Access-Control-Allow-Origin
标头响应 OPTIONS
和 GET
请求。
随你喜欢。我更喜欢返回 JSON (application/json
),但你可以返回任何你喜欢的东西。使用 CORS 就像进行常规 AJAX 调用一样,只是它从不同于您的源服务器的服务器请求。【参考方案2】:
您需要在主机 2 中添加一个额外的标头以允许主机 1。本站将帮助您http://enable-cors.org/
【讨论】:
链接+1。我只会选择一个已经支持的。我喜欢node.js,如果django中已经没有太多代码,可以轻松迁移到node。【参考方案3】:JSONP即将解决跨域问题:
http://en.wikipedia.org/wiki/JSONP
jQuery 有很好的功能来支持 JSONP,
(只是这个主题的一些谷歌链接)
http://sangers.nu/blog/tech/20090129-jsonp-with-jquery
编辑:
JSONP 可能看起来比第一眼看起来有点奇怪 :) 基本上应该支持 JSONP 表示法(调用回调方法,如果提供的话)。因此,它会检查是否提供了“回调”方法,而不是像
那样返回结果 some: 12
确实如此,
callback( some: 12 )
这是我的博客文章:
http://www.beletsky.net/2010/07/json-jsonp-and-same-origin-policy-issue.html
【讨论】:
嘿,这看起来很不错,但我不知道如何传递回调变量使其工作? JSONP 只是对不支持 CORS 的服务器的一种破解。现在 CORS 可用,JSONP 应该只用作备用。 我从服务器返回的数据的 mimetype 是什么 application/json, 和 json 完全一样)【参考方案4】:jsonp 是你的选择,因为我在这里使用了 django sn-p
http://djangosnippets.org/snippets/2208/
【讨论】:
以上是关于如何在 django 中使用 Javascript 获取跨域数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 javascript(或类似的)在 Django 模板中切片列表项
如何在 Django 模板上传递 Python 列表并在 JavaScript 中使用它?
如何在 django 中使用 Javascript 获取跨域数据?
使用 Django,如何在我的 javascript 中检测到管理员?