javascript JSONP回调函数未定义

时间:2010-12-24 19:49:54

标签: javascript jsonp

(
function restoreURL() {
    function turnLongURL(data) {
        window.location = data.url;
    }

    var shortUrl = window.location.href;

    var url = "http://json-longurl.appspot.com/?url=" + shortUrl + "&callback=turnLongURL";

    var script = document.createElement('script');
    script.setAttribute('src', url);

    document.getElementsByTagName('head')[0].appendChild(script); 
})();

代码在上面,但 firebug 告诉我,turnLongURL 定义

为什么会这样?

1 个答案:

答案 0 :(得分:8)

使用script元素将JSON-P添加到文档中,因此其中的函数调用必须引用存在于全局范围内的函数。

turnLongURL仅限于restoreURL的范围,因为它是在window.turnLongURL = function (data) { 内定义的。

将函数声明移动到全局作用域,或将其更改为函数语句:

{{1}}

......应该让它发挥作用。

如果在第一次返回之前发出多个JSON-P请求,请记住考虑竞争条件的可能性。