Функция обратного вызова 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 не определен

это почему?


person Ya Zhuang    schedule 24.12.2010    source источник


Ответы (1)


JSON-P добавляется в документ с помощью элемента script, поэтому вызов функции внутри него должен ссылаться на функцию, которая существует в глобальной области видимости.

turnLongURL ограничен областью действия restoreURL, так как он определен внутри него.

Перемещение объявления функции в глобальную область или изменение его на оператор функции таким образом:

window.turnLongURL = function (data) {

… должно заставить это работать.

Не забудьте учесть возможность возникновения условий гонки, если несколько запросов JSON-P будут отправлены до того, как вернется первый.

person Quentin    schedule 24.12.2010
comment
он все еще не работает, и продолжайте говорить, что turnLongURL не определен... есть ли какая-то разница, если я редактирую скрипт Greasemonkey? - person Ya Zhuang; 24.12.2010
comment
@Quentin Как лучше всего учитывать условия гонки jsonp? - person David d C e Freitas; 02.12.2011
comment
Связанный? stackoverflow .com/questions/8495825/ - person James Hibbard; 09.10.2016