除非在JSONP回调函数中使用,否则JSONP响应将返回undefined

时间:2011-10-26 11:27:55

标签: javascript ajax jsonp

我正在尝试从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 responsevar test = $('http...');一样,但test未定义; <{1}}未被退回。

我确信我看起来很傻,这可能与封闭内部有什么关系?

我真的很感谢你帮忙解决这个问题!

尽管如此,请不要jQuery等回答,因为我想了解这一切是如何完成的。

谢谢大家!

1 个答案:

答案 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);

                }