跨域访问和JSONP

时间:2014-04-06 18:11:30

标签: javascript http cross-domain jsonp

这是关于跨域访问资源的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')的字符串?

1 个答案:

答案 0 :(得分:1)

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

JSONP使用此<script>标记的功能来解决跨域问题。它要求目标服务器支持JSONP的处理方式,以便服务器必须合作。从JSONP调用返回的结果实际上必须是一个脚本,它必须在JSONP请求URL中调用reqeusted中的函数名称,并将所需的数据传递给该脚本。

您可能希望阅读描述JSONP如何工作的this article

并且this MDN same-origin article关于跨域访问的内容和不允许的详细信息。

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