如何在 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 标头响应 OPTIONSGET 请求。 随你喜欢。我更喜欢返回 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 获取跨域数据?的主要内容,如果未能解决你的问题,请参考以下文章