我正在尝试跨域使用JSONP API。这是它返回的数据的一个例子:
photos({"marker":{"@attributes":{"id":"30601","latitude":"52.638061","longitude":"-2.117067","feature":"3","caption":"cat","thumbnailSizes":"60|120|150|180|200|250|300|350|400|400|425|450|500|640"}}});
如何构建使用此数据的Ajax调用?我一直收到错误消息。
这就是我现在正在尝试的事情:
$.ajax({
url: pm_url,
data: {},
type: "get",
dataType: "jsonp",
cache: false,
success: function(data) {
console.log(data);
},
error: function() {
alert('Sorry, there was a problem getting the photos!');
}
在Firebug中,我可以看到正在检索上面的数据,但后来我看到了错误消息。
请求有什么问题? (或数据 - 虽然它验证为JSONP。)
更新:
感谢您的建议。我现在正在尝试:
var photos = function (data) {
alert(data);
};
$.ajax({
url: pm_url,
dataType: 'jsonp',
jsonpCallback: 'photos',
});
奇怪的是,在Firebug中调用两个URL:
http://myapi.com/file.jsonp?x=1&y=2?callback=?
http://myapi.com/file.jsonp?x=1&y=2?callback=photos&_=1304982373561
第一个URL在控制台中显示为错误。我做错了什么?!
API本身可能是错误的(它们需要.jsonp后缀并忽略回调的值,这就是函数名称修复的原因)但是我希望我可以解决它。
答案 0 :(得分:4)
功能名称(照片)错误。 jQuery将发送一个名为“callback”的GET参数,该参数的值是函数需要的名称。
响应,PHP示例:
<?php echo $_GET['callback'].'('.json_encode($some_object).');';?>
解释jsonp会发生什么:
假设使用值jquery1234发送callback-parameter: jQuery将创建一个临时函数:
function jquery1234(data){return data;}
所以,如果你发送一个像
这样的回复jquery1234({'somevar':'somevalue'});
... jQuery将创建该响应的脚本元素,调用该函数并将对象转移到成功函数。
答案 1 :(得分:0)
为什么不使用$ .getJSON()? http://api.jquery.com/jQuery.getJSON/