如何在客户端和服务器端设置jsonp

Posted

技术标签:

【中文标题】如何在客户端和服务器端设置jsonp【英文标题】:how to set up jsonp on the client and server side 【发布时间】:2012-05-26 11:37:19 【问题描述】:

我对使用jsonp时的回调函数很困惑

这是我的 json 格式的 js 文件 http://asla.dev.1over0.com/Guide/js/testjson.js

本质上就是这个json

"x": 10, "y":15 

这是我要检索的数据 这是我的网站,客户想要从跨域的 js 文件中获取数据 http://www.waveofcolor.com/faq.php 为了让我在 js 文件中检索该数据,我必须包含 js 文件 http://asla.dev.1over0.com/Guide/js/testjson.js 在脚本标签内 并声明一个函数来告诉页面如何处理这些数据 这是代码

function func(json)
alert(json.x) 

<script type="text/javascript" src="http://asla.dev.1over0.com/Guide/js/testjson.js"></script>

我想这是我感到困惑的部分;到目前为止,我已经读到您几乎只需将查询字符串添加到您在脚本标记中调用的 js 文件的末尾

<script type="text/javascript" src="http://asla.dev.1over0.com/Guide/js/testjson.js"></script>

现在是

<script type="text/javascript" src="http://asla.dev.1over0.com/Guide/js/testjson.js?jsonp=func"></script> 

我的问题是...... jsonp 是如何知道调用 func 函数的? 这需要在后端设置吗? 如果是这样,如何使用 PHP 或 .NET 4.0 Framework 进行设置。 如果我像这样在 js 文件中硬编码并调用 func 函数,我可以让 jsonp 工作

func( "x": 10, "y": 15);

但是在js文件中调用实际函数没有意义吧?

一如既往地感谢任何输入

【问题讨论】:

【参考方案1】:

是的,你是对的。真正的 JSONP 需要后端支持。通常,您返回的 JSON 也是动态的。如果不是(每个人只共享一大块数据),硬编码一个函数名称(选择一个比func 更好的名称)是粗略但有效的。

如果你想要实际的 JSONP,有多种方法可以在后端进行。请参阅这个关于 ASP.NET MVC 上 JSONP 的琐碎 PHP example 和 this question

【讨论】:

感谢马特的澄清和他们有用的链接

以上是关于如何在客户端和服务器端设置jsonp的主要内容,如果未能解决你的问题,请参考以下文章

使用服务器端语言作为 Javascript 的 JSONP 调用

jsonp的原理与实现

Jsonp处理跨域请求

Vue中如何使用axios发送jsonp跨域验证

解决跨域的方式(9种)

浏览器端实现跨域方法汇总