有人可以解释我如何像我五个人一样进行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(但它可以执行一些有用的操作,例如使用uid 123查找用户的用户名)。 然后,服务器发回脚本内容alert(246)

  • **客户端从服务器运行脚本并发出警报246

好吧,如果我希望客户alert某些内容,这很棒,但我怎么能做一些有用的事情呢? 我们必须做出最后一次飞跃:提供客户端函数名称作为参数:

  • 客户端将函数myFunc定义为: function myFunc(a) { alert(a) }

  • 客户端