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, время: 04:19. |