我正在尝试从Twitter获取JSONP响应并具有以下代码:
<!doctype html>
<html>
<head>
</head>
<body>
<script>
(function($, container) {
container[$] = function(url){
url += '&callback=jsonp';
var scriptEl = document.createElement('script');
scriptEl.setAttribute('src', url);
document.getElementsByTagName('head')[0].appendChild(scriptEl);
}
window.jsonp = function(response) {
return response;
}
})('$', this);
</script>
<script>
var test = $('http://api.twitter.com/1/statuses/user_timeline.json?screen_name=jonathonoates');
</script>
</body>
</html>
如果代替return response;
函数中的window.jsonp
,我会坚持alert(response)
我可以看到我从Twitter获得了成功的回复。
我希望return
response
与var test = $('http...');
一样,但test
未定义; <{1}}未被退回。
我确信我看起来很傻,这可能与封闭内部有什么关系?
我真的很感谢你帮忙解决这个问题!
尽管如此,请不要jQuery等回答,因为我想了解这一切是如何完成的。
谢谢大家!
答案 0 :(得分:0)
由于异步调用的行为,必须在从源(在本例中为Twitter)检索JSONP之后调用回调函数。
回调函数应作为参数与$
函数中的URL一起传递,以便可以从jsonp
函数中调用它,该函数应该是{{1}的子函数。功能。
$
并称之为:
url += '&callback=jsonp';
var scriptEl = document.createElement('script');
scriptEl.setAttribute('src', url);
head.appendChild(scriptEl);
container.jsonp = function(response) {
return callback(response);
}