如何更改mootools类Request.JSONP中的回调函数

时间:2011-09-07 20:48:10

标签: mootools jsonp

我正在使用Request.JSONP获取一些数据,但我需要更改检索de数据的url中的回调函数。

使用文档中的示例:

如何更改此通话:

http://www.flickr.com/?format=json&jsoncallback=Request.JSONP.request_map.request_0

到此:

http://www.flickr.com/?format=json&jsoncallback=myOwnFunction

在jQuery中你可以使用“jsonpCallback”设置来使用你自己的函数,但我找不到在MooTools中改变它的方法。

任何帮助,想法,将不胜感激。

修改

我的问题是我的函数将在setInterval函数中,每次执行请求的url更改时都会这样:

回调= Request.JSONP.request_map.request_0

回调= Request.JSONP.request_map.request_1

回调= Request.JSONP.request_map.request_2 ... N

我需要最后一位数字不会改变(出于缓存目的)

1 个答案:

答案 0 :(得分:1)

它为JSONP称为callbackKeyread the doc

这是一个flickr类,它扩展了我写的jsonp(更改api pls):

// the class
Request.flickr = new Class({
    Extends: Request.JSONP,
    options: {
        callbackKey: "jsoncallback",
        url: "http://www.flickr.com/services/rest/?",
        log: true
    },
    initialize: function(params, options) {
        this.parent(options);
        this.options.url = this.options.url + Object.toQueryString(params);
    },
    success: function(data, script) {
        this.parent(data, script);
    },
    imageURL: function(obj) {
        return "http://farm{farm}.static.flickr.com/{server}/{id}_{secret}.jpg".substitute(obj);
    }
});

// example on how to use
new Request.flickr({
    format: 'json',
    api_key: "e7df6c74d2545f55414423463bf99723", // your api here
    per_page: 4,
    tags: "mountains",
    method: "flickr.photos.search"
}, {
    onSuccess: function(data) {
        target = document.id("action");
        var self = this;
        data.photos.photo.each(function(el) {
            new Asset.image(self.imageURL(el), {
                onload: function() {
                    this.inject(target);
                }
           });
        });
    }
}).send();

完全覆盖回调并传递外部函数(需要是全局的):

window.foo = function(data) {
    console.log(data);
};


Request.flickr = new Class({
    Extends: Request.JSONP,
    options: {       
        url: "http://www.flickr.com/services/rest/?jsoncallback=foo&",
        log: true
    },
    initialize: function(params, options) {
        this.parent(options);
        this.options.url = this.options.url + Object.toQueryString(params);
    },
    success: function(data, script) {
        this.parent(data, script);
    },
    imageURL: function(obj) {
        return "http://farm{farm}.static.flickr.com/{server}/{id}_{secret}.jpg".substitute(obj);
    }
});

// example on how to use
new Request.flickr({
    format: 'json',
    api_key: "e7df6c74d2545f55414423463bf99723",
    // your api here
    per_page: 4,
    tags: "mountains",
    method: "flickr.photos.search"
}).send();

上面的代码将运行函数foo,将JSON对象传递给它。 http://jsfiddle.net/dimitar/DUtff/