【问题标题】:Cross domain access and JSONP跨域访问和 JSONP
【发布时间】:2014-05-18 20:10:00
【问题描述】:

这是一篇关于跨域访问资源的answer

The XHR is constrained by cross-domain rules; to use JSONP you need to add a script element:

function func_callbk()
{
    console.log(arguments);
}

var s = document.createElement('script');
s.type = 'text/javascript';
s.src = 'http://abhishekprakash.com/script/example.json?callback=func_callbk';
var h = document.getElementsByTagName('script')[0];
h.parentNode.insertBefore(s, h);
As pointed out by Ian in the comments, the proper response of your server should be something like this:

func_callbk('hello world')

问题:

  • 如果您无法跨域访问资源,则该资源将无法访问,或者至少浏览器不允许该域访问其他域: s.src = 'http://abhishekprakash.com/script/example.json?callback=func_callbk'; 对吗?
  • 当访问上述资源时,握手中的兼容服务器应返回func_callbk('hello world') 的字符串?

【问题讨论】:

  • 你的问题不是很清楚。 JSONP 利用了这样一个事实,即通常浏览器允许脚本源位于与主机页面不同的域中。是的,符合 JSONP 的服务器返回其 JSON 响应,该响应包含在对您提供的名称的函数的调用中。

标签: javascript http cross-domain jsonp


【解决方案1】:

浏览器将允许 <script> 标签引用跨域资源(以及一些其他标签,例如 <img><iframe> 以及其他一些标签,但不允许 ajax 调用引用没有特定的跨域服务器权限被授予。

JSONP 使用赋予<script> 标签的这一功能来解决跨域问题。它要求目标服务器支持 JSONP 做事方式,因此服务器必须配合。从 JSONP 调用返回的结果实际上必须是一个脚本,并且它必须调用 JSONP 请求 URL 中请求的函数名并将所需的数据传递给该脚本。

您可能想阅读 this article 描述 JSONP 的工作原理。

还有this MDN same-origin article 了解允许和不允许跨域访问的详细信息。

如果您愿意需要更新的浏览器并在您的服务器上进行适当的设置,您可以使用跨域资源共享。信息herehere

【讨论】:

  • 哦!我误认为 s.src = URL 跨域资源访问:-/
  • @xybrek - 这是一个跨域资源访问,但可以从<script>标签开始。
  • @xybrek - 什么只适用于 HTTP GET?如果我记得,您可以将表单发布到不同的服务器,但不能发布 ajax。
  • 只有通过 HTTP GET 才能获取其他域的 JSON 文档?
  • @xybrek - 好吧,我上面所说的只是通过使用<script> 标记(恰好使用HTTP GET)。您可以阅读更多关于允许和不允许的内容here
猜你喜欢
  • 2011-07-27
  • 2011-02-02
  • 2013-01-04
  • 2013-10-23
  • 2014-12-20
  • 2014-04-19
  • 1970-01-01
  • 2011-07-31
相关资源
最近更新 更多