可以以某种方式更改回调函数名称?

时间:2011-04-17 14:59:58

标签: jquery ajax json jsonp

嘿,我正在用AJAX调用“flickr.interestingness.getList”来获取有趣的图片,这是我的AJAX调用。

function getPhoto()
{
$.ajax("http://api.flickr.com/services/rest/?method=flickr.interestingness.getList&format=json&api_key=fbfe07eb3cc28814df5bbc0313cdd521", 
        {
        dataType: "jsonp",
        //jsonp: false, jsonFlickrApi: "jsonpcallback",
        jsonpCallback: "jsonFlickrApi",
        });
}

function jsonFlickrApi(data)
{
alert(data.photos.photo);
}

这里“JsonFlickrApi”是来自Flickr的预定义函数,它包装了包含一堆照片的json对象。我的问题是,我可以以某种方式覆盖预定义的函数,“jsonFlickApi”并将回调函数命名为“jsonFlickrApi”之外的其他东西,我认为jsonp参数应该在我阅读jQuery文档但未能更改它之后执行此操作。或者我不太明白jsonp参数在jQuery AJAX调用中的作用。谢谢

2 个答案:

答案 0 :(得分:6)

你很亲密。这非常有效:

function getPhoto() {
    $.ajax({
        url: "http://api.flickr.com/services/rest/?method=flickr.interestingness.getList&format=json&api_key=fbfe07eb3cc28814df5bbc0313cdd521",
        dataType: "jsonp",
        jsonp: 'jsoncallback',
        success: function(data) {
            alert(data);
        }
    });
}

getPhoto();

DEMO

作为documentation describes,您可以使用jsoncallback参数设置自己的回调名称。因此,我们必须设置jsonp: 'jsoncallback'。在jQuery documentation中,您可以发现建议让jQuery选择一个回调名称。只需设置success回调,即可完成。

答案 1 :(得分:2)

来自Flickr API docs

  

如果你只想要原始的JSON,没有   函数包装器,添加参数   nojsoncallback,值为1到   你的要求。

     

定义自己的回调函数   name,添加参数jsoncallback   以您想要的名字作为价值。

nojsoncallback=1    -> {...}
jsoncallback=wooYay -> wooYay({...});

示例:

http://api.flickr.com/services/rest/?method=flickr.interestingness.getList&format=json&api_key=fbfe07eb3cc28814df5bbc0313cdd521&jsoncallback=myCallbackFun

返回:

myCallbackFun({"photos":{"page":1, "pages":5, "perpage":100, "total":500, "photo":[{"id":"5623656271", "owner":"50725098@N08", "secret":"b67514798d", "server":"5143", "farm":6, "title":"Defying Gravity!!!", "ispublic":1, "isfriend":0, "isfamily":0}, {"id":"5624056667", "owner":"51832166@N03", "secret":"57ffca018d", "server":"5301", "farm":6, "title":"Navy Officers: Pearl Harbor", "i...