2010-03-01 3 views
0

J'essaye de créer un badge StackOverflow personnalisé en utilisant JSONP et MooTools. Voici le code:La requête JSONP à StackOverflow avec MooTools ne fonctionne pas

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

Cependant, je reviens toujours ce message:

RequestJSONPrequest_maprequest_0 is not defined 

Je me demande si cela est un problème avec la réponse de StackOverflow puisque les demandes d'autres services avec le travail JSONP bien pour moi.

+1

il semble que l'analyseur des débordements de pile «.» Du paramètre callback = de la requête json, ce qui signifie que la pile des fonctions de rappel de requête que la classe conserve ne peut pas être référencée. lorsque vous activez le journal: 'Récupération du script JSONP avec l'URL: http: //stackoverflow.com/users/flair/166325.json? callback = Request.JSONP.request_map.request_0' -> ' RequestJSONPrequest_maprequest_0 n'est pas défini' intéressant . vous pouvez toujours le faire manuellement ou refactoriser Request.JSON.getScript pour prendre en charge une substitution pour le callback = à une fonction statique. testcase: http://www.jsfiddle.net/xS7pQ/ –

+0

et avec la fonction prédéfinie, cela fonctionne: http://www.jsfiddle.net/xS7pQ/2/ –

Répondre

1

trouvé un moyen de contourner: http://www.jsfiddle.net/CRdr6/1/

en passant sur callbackKey: « rappel = myfunc & foo » à la classe Request.JSONP (il est pas échappé correctement), vous pouvez utiliser myfunc en fonction globale pour gérer la rappel et faire le tour des dénudées .

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

Je fini par créer la fonction qui StackOverflow finit par appeler (sans les points):

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; 
    } 
}); 
Questions connexes