kyberorg
@kyberorg

Обертка для функции $.ajax библиотеки jQuery. Callback вызывается, но параметры не передаются. Как починить?

Я новичек в мире JS, поэтому просьба сильно не пинать ногами. В моём клиентском коде будет много GET и POST запросом, поэтому я решил написать обертки для функции $.ajax

Вот что вышло:
/**
 * Makes Get request
 * @param url URL
 * @param successCallback function triggered when request is successfully proceeded
 * @param failCallback  function triggered is case of failed request
 */
function getRequest(url,successCallback,failCallback){
    $.ajax({
        url: url,
        timeout: 3000,
        dataType: "json",
        success: function(data,textStatus,jqXHR){
            successCallback(data,textStatus,jqXHR);
        },
        error: failCallback(jqXHR,textStatus,errorThrown)
    });
}


В коде я запускаю это так:
url = "/api/info";
function onSuccess(data,textStatus,jqXHR){
        $("#result").html("Hostname is "+data.hostname);
}
function onFail(jqXHR,textStatus,errorThrown){
        $("#result").html("Shit happens");
}
//fire request
getRequest(url,onSuccess(),onFail());


В итоге callback срабатывает, но все параметры undefined.
  • Вопрос задан
  • 2927 просмотров
Решения вопроса 1
RubaXa
@RubaXa
Нужно передать ссылки на функции, а не вызывать их:
getRequest(url, onSuccess, onFail);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
jakulov
@jakulov
getRequest(url,onSuccess(),onFail());

вы передаете в качестве callback не саму функццию, а результат ее выполнения, вызывая ее onSuccess() при вызове getRequest.

Тут нужно писать:
getRequest(url,'onSuccess','onFail');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы