Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用MooTools进行StackOverflow的JSONP请求不起作用_Javascript_Jsonp_Mootools - Fatal编程技术网

Javascript 使用MooTools进行StackOverflow的JSONP请求不起作用

Javascript 使用MooTools进行StackOverflow的JSONP请求不起作用,javascript,jsonp,mootools,Javascript,Jsonp,Mootools,我正在尝试使用JSONP和MooTools构建一个定制的StackOverflow徽章。代码如下: new Request.JSONP('http://stackoverflow.com/users/flair/166325.json', { onComplete: function(data) { console.log(data); } }).request(); 然而,我总是收到这样的信息: RequestJSONPrequest_maprequest_0 is not

我正在尝试使用JSONP和MooTools构建一个定制的StackOverflow徽章。代码如下:

new Request.JSONP('http://stackoverflow.com/users/flair/166325.json', {
  onComplete: function(data) {
    console.log(data);
  }
}).request();
然而,我总是收到这样的信息:

RequestJSONPrequest_maprequest_0 is not defined
我想知道StackOverflow的响应是否有问题,因为使用JSONP对其他服务的请求对我来说很好。

找到了解决方法:

通过将callbackKey:“callback=myfunc&foo”传递给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();

我最终创建了StackOverflow最终调用的函数(没有点):


看起来好像堆栈溢出的解析器从json请求的callback=参数中删除了
,这意味着类保留的请求回调函数堆栈无法被引用。启用日志:
JSONP检索带有url的脚本时:http://stackoverflow.com/users/flair/166325.json?callback=Request.JSONP.request_map.request_0
->
RequestJSONPrequest\u maprequest\u 0未定义。您始终可以手动执行此操作,也可以重构Request.JSON.getScript以支持对静态函数的callback=进行重写。testcase:通过预定义函数,它可以:
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;
  }
});