有人可以解释我如何像我五个人一样进行JSONP调用吗?
我已经在服务器中有一个.json对象。 它是正确的,没有语法错误(有效的json)。 我想通过JSONP调用此对象,因为它驻留在与我的应用程序不同的服务器中。
我想我理解如何在客户端实现它,但我不知道该怎么做与服务器部分有关。 在关注网上已有的信息时,我一直有错误。 有帮助吗?
JSONP基本上是一个“hack”,允许站点加载数据并忽略同源策略 。 它的工作原理是在页面上附加标签。
事实上的方法是在您的请求中发送回调。 然后服务器将获取该名称并生成一个JS文件,该文件使用数据调用该函数。
使用jQuery,您只需附加?callback=?
即可进行JSONP调用?callback=?
执行$.getJSON
时的URL。
例:
$.getJSON('http://YourSite.com/path/to/json.php?callback=?', function(data){ console.log(data); // this will be parsed for you });
或者,您可以使用完整的$.ajax
方法:
$.ajax({ url: 'http://YourSite.com/path/to/json.php', dataType: 'jsonp', // this tells jQuery to add "callback=?" for you success: function(data){ console.log(data); // this will be parsed for you } });
而不是mackning AJAX调用,jQuery实际上将附加:
到你的页面(注意: jQuery12345
将随机生成)。
然后在您的服务器上,您需要使用有效的JavaScript文件进行响应。 它应该包含对查询字符串中传递的callback
函数的调用。 像这样的东西:
jQuery12345({your: ['json', 'data']});
PHP中的一个示例(适应您使用的任何服务器端语言)可以是:
$array = ['a' => 1, 'b' => 2,'c' => 3]; $callback = $_GET['callback']; header('Content-type: text/javascript'); echo "{$callback}(".json_encode($array).");";
这里的所有都是它的。 有关更多信息,请参阅JSONP上的Wikipedia页面: http : //en.wikipedia.org/wiki/JSONP
JSONP与JSON无关。 这是一个简单(但无用)的例子:
-
客户端创建一个脚本元素:
-
服务器听到
foo.js?arg=123
的请求。 服务器使用该arg
值执行某些操作 - 假设它将它乘以2(但它可以执行一些有用的操作,例如使用uid123
查找用户的用户名)。 然后,服务器发回脚本内容alert(246)
。 -
**客户端从服务器运行脚本并发出警报
246
。
好吧,如果我希望客户alert
某些内容,这很棒,但我怎么能做一些有用的事情呢? 我们必须做出最后一次飞跃:提供客户端函数的名称作为参数:
-
客户端将函数
myFunc
定义为:function myFunc(a) { alert(a) }
-
客户端