2010-03-01 141 views
0

我想使用JSONP和MooTools建立一個自定義的StackOverflow徽章。下面是代碼:JSONP請求與StackOverflow與MooTools不起作用

new Request.JSONP('http://stackoverflow.com/users/flair/166325.json', { 
    onComplete: function(data) { 
    console.log(data); 
    } 
}).request(); 

不過,我總是回到這條消息:

RequestJSONPrequest_maprequest_0 is not defined 

我不知道這是否是因爲有與JSONP工作請求的其他服務從StackOverflow的響應問題對於我來說足夠了。

+1

它看起來好像堆棧溢出的解析器剝離了json請求的callback =參數的'.',這意味着該類所保存的請求回調函數堆棧無法被引用。當您啓用日誌:'JSONP檢索腳本與URL:http://stackoverflow.com/users/flair/166325.json?callback = Request.JSONP.request_map.request_0' - > 'RequestJSONPrequest_maprequest_0未定義' 有趣。您可以始終手動執行此操作,或者重構Request.JSON.getScript以支持將callback =重寫爲靜態函數。 testcase:http://www.jsfiddle.net/xS7pQ/ –

+0

和預定義的函數,它的工作原理如下:http://www.jsfiddle.net/xS7pQ/2/ –

回答

1

找到變通的辦法:http://www.jsfiddle.net/CRdr6/1/

通過傳遞callbackKey:「回調= MYFUNC &富」到Request.JSONP類(它沒有正確地轉義),可以使用MYFUNC作爲一個全局函數來處理回調到處去剝離.

Request.stackoverflow = new Class({ 
    Extends: Request.JSONP, 
    options: { 
     log: true, 
     url: "http://stackoverflow.com/users/flair/{user}.json", 
     callbackKey: "callback=myfunc&foo" 
    }, 
    initialize: function(user, options) { 
     this.parent(options); 
     this.options.url = this.options.url.substitute({user: user}); 
    }, 
    success: function(data, script) { 
     this.parent(data, script); 
    } 
}); 


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

new Request.stackoverflow(166325).send(); 
0

我結束了創建的StackOverflow結束調用該函數(不點):

var StackOverflow = Class.refactor(JsonP, { 
    getScript: function(options) { 
    var index = Request.JSONP.counter; 
    var script = this.previous(options); 
    eval("RequestJSONPrequest_maprequest_" + index + " = Request.JSONP.request_map['request_' + index];"); 
    return script; 
    } 
});