JS видимость колбека внутри колбека?
У меня есть код (расширение для хрома), который я не понимаю из-за особенностей js
chrome.runtime.onMessage.addListener( function(message, sender, sendResponse) { $.ajax({ url: "http://some.site" ,type: "POST" ,data: message ,success: function(data) { sendResponse('работает аякс'); } }); sendResponse('просто'); } ); Почему функция sendResponse('работает аякс'); не срабатывает? Подозреваю, что я пытаюсь вызвать sendResponse не в том контексте. Как нужно правильно читать этот код? И как добиться того чтобы колбек success от аякса, смог вызвать sendResponse? |
paka, из того, что ты куда-то передал безымянную функцию с кучей параметров не значит, что ее вызовут с теми параметрами... ;)
|
я не понимаю, почему вызов
sendResponse('просто'); // работает а вызов из аякса sendResponse('работает аякс'); // не работает Прошу мне подсказать, как нужно читать код? |
paka, ты передал куда-то безымянную функцию с кучей параметров...
Ты знаешь как потом ту функцию будут вызывать? Ее будут вызывать с нужными параметрами? Если ее вызовут без параметров - первая же попытка использовать их внутри безымянной функции будет вызывать ошибку. |
Цитата:
function message(Txt) { alert(Txt) }; setTimeout(function(Txt,message){ message(Txt) },1000); Не работающий конечно... :) Т.е. одного начертания имен функций и переменных не хватит для правильной работы кода. |
Цитата:
|
paka, вот рабочий вариант с использование калбек-функции с параметрами...
function message(Txt) { alert(Txt) }; setTimeout((function (Mess,Fnc){ return function(){ Fnc(Mess); } })('Test',message),1000); |
Цитата:
Цитата:
|
У меня проблема в том, что строка 14 выпоняется, те.
sendResponse('просто'); // работает а вызов тойже функциии из строки 10 sendResponse('работает аякс'); // не работает возможно вы уже ответили или я не туда смотрю? |
Цитата:
Остается только правильно "оформить" success. Например так chrome.runtime.onMessage.addListener( function(message, sender, sendResponse) { $.ajax({ url: "http://some.site" ,type: "POST" ,data: message ,success: (function(Fnc){ return function(data){ Fnc('работает аякс'); } })(sendResponse) }); endResponse('просто'); } ); |
Часовой пояс GMT +3, время: 01:08. |