如何在 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 获取跨域数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 javascript(或类似的)在 Django 模板中切片列表项

如何在 Django 模板上传递 Python 列表并在 JavaScript 中使用它?

如何在 django 中使用 Javascript 获取跨域数据?

使用 Django,如何在我的 javascript 中检测到管理员?

如何使用Django模板在javascript中访问ajax jquery中的模板变量

上传文件后,如何在 Django 中使用 AJAX 更新表(与 JavaScript 链接)?