jasonp跨域请求“将json包装成回调方法”

我添加了?callback =? 使用匿名函数获取请求中的url,我必须添加到我的服务器端代码以使其跨域工作。

在这里使用getJSON是正确的吗?

这里是没有JSONP的播放器的一个例子http://www.freeenergymedia.com/shared/PLAYER/player/player.php

返回JSON数据的PHP脚本

channel->item; $i = 0; $data = array(); foreach ($items as $item) { $data[] = array( 'title' => (string) $item->title, 'mp3' => (string) $item->enclosure['url'], ); if (++$i == 3) break; } $jsdata = json_encode($data); $test = htmlspecialchars($jsdata, ENT_NOQUOTES, 'utf-8'); $jsdata = ($_GET['callback'].'('.json_encode($data).');'); echo $jsdata ?> 

获取请求,将JSON加载到播放器中

  $(document).ready(function() { $.getJSON("http://www.freeenergymedia.com/getxml2.php?callback=?", function callback(json) { new jPlayerPlaylist({ jPlayer: "#jquery_jplayer_1", cssSelectorAncestor: "#jp_container_1" }, json, { swfPath: "js", supplied: "mp3, oga", wmode: "window" }); }) }); 

标记

     Demo : jPlayer as an audio playlist player         

您的PHP脚本返回JSONP而不是JSONP。 要使其跨域工作,您必须实际修改PHP以返回对回调函数的调用。

所以你必须确保PHP代码在表单callback(data);返回数据callback(data);

 $jsdata = ($_GET['callback'].'('.json_encode($data).');'); 

将您的JavaScript .getJSON()调用更改为:

 $.getJSON("http://www.freeenergymedia.com/getxml2.php?callback=?", function(json) { // ... rest of the code }); 

jQuery将插入到URL生成的回调名称中。

见文档 。