JQuery: callback - отдельной функцией

Ваано
На сайте с 01.08.2009
Offline
112
725

Всем привет.

Имеется следующий код по отправке GET-запроса по указанному урлу с использованием JQuery:

$.getJSON('урл-и-параметры', function(json) { 
//Тут еще какой-то код, обрабатывающий ответ сервера
});

Погуглил, но не нашел способа каким можно вместо встроенной функции указать отдельную функцию, как-то так:

$.getJSON('урл-и-параметры', MyFunction(json)); 

И отдельно уже задать function MyFunction(json) {} с нужным кодом.

Надеюсь понятно выразился и заранее спасибо за помощь :beer:

Туры в Мексику тут (http://www.metmexico.com). Оптимальное отношение цена/качество.
siv1987
На сайте с 02.04.2009
Offline
427
#1

$.getJSON('урл-и-параметры', MyFunction);

Ваано
На сайте с 01.08.2009
Offline
112
#2
siv1987:
$.getJSON('урл-и-параметры', MyFunction);

Спасибо, но проверил такой вариант - выдаётся ошибка о том, что параметр json не найден. В общем-то логично, так как мы его не передаём в MyFunction.

Приведенный мной выше пример с передачей этого параметра тоже к сожалению не работает :/

K
На сайте с 03.06.2015
Offline
45
#3
Ваано:
Спасибо, но проверил такой вариант - выдаётся ошибка о том, что параметр json не найден.

Вам нужен не json, а объект - тот самый XMLHttpRequest, который придет как this и вы сами уже возьмете с него this.responseText и сделаете json - JSON.parse(this.responseText) и далее по тексту функции-колбека.

Ну или просто проверьте какой this биндится в MyFunction.

UPD, кажется понял

В общем-то логично, так как мы его не передаём в MyFunction

Параметр не не передается, а предусматривается. То есть вы знаете что вызыватель положит в колбек аргумент и пишите текст этого колбека так

var myFunction=function(json){ console.log(json) };

Вызыватель в своих внутренностях получив указатель на функцию сделает вот так, например:


if(typeof callback==='function')
callback(json);

Без жиквери простейший интерфейс аякса по гету может быть таким


sendGet=function(url,func) {
var link=new XMLHttpRequest();
link.onreadystatechange=function(){
if(this.readyState==4) {
D.body.classList.remove('wait');
try{func(this);}
catch(e){console.log(this.responseText);}
}
};
D.body.classList.add('wait');
link.open("GET",url);
link.setRequestHeader("X-Requested-With","XMLHttpRequest");
link.send();
};


---------- Добавлено 16.07.2015 в 10:22 ----------

Только сейчас заметил
И отдельно уже задать function MyFunction(json) {} с нужным кодом.

Все должно работать. Абсолютно никакой разницы как передать анонимную функцию - текстом в аргументе, или ссылкой на функцию в переменной.

То есть в первом случае будет вот так

callback=function(json){}; // callback - имя аргумента

или во втором случае

callback=MyFunction // скопировали реф на функцию в переменной

в то время как

MyFunction=function(json){};

вызыватель засунет аргумент в callback(json) что в точности обозначает вызов MyFunction(json)

ЗЫ Нет, разница есть применительно к замыканиям видимости. Это вы делаете кложу, то вам придется определять функцию в том месте, где видны ей нужные переменные. А если это просто колбек, или он и так все нужное "видит", то никакой.

MYSQL PHP JS HTML CSS SEO TXT США СССР
siv1987
На сайте с 02.04.2009
Offline
427
#4
Ваано:
Спасибо, но проверил такой вариант - выдаётся ошибка о том, что параметр json не найден. В общем-то логично, так как мы его не передаём в MyFunction.

Не вы его передаете, а библиотека вызывает вашу коллбэк функцию с этим параметром который вы определяете в свой функцией как входящий аргумент. Приведенный вами пример не правильный, так как вы вызываете а не передаете функцию. Как правильно - вам указали, или смотрите в документации. А если не работает, значит ошибка в вашем коде.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий