JSONP:如何构造ajax查询?

时间:2011-05-09 22:30:52

标签: jquery json jsonp

我正在尝试跨域使用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后缀并忽略回调的值,这就是函数名称修复的原因)但是我希望我可以解决它。

2 个答案:

答案 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/