AJAX-функция Javascript возвращает неопределенное значение вместо true / false - PullRequest
2 голосов
/ 11 мая 2010

У меня есть функция, которая выдает AJAX-вызов (через jQuery). В разделе complete у меня есть функция, которая говорит:

complete: function(XMLHttpRequest, textStatus)
{
    if(textStatus == "success")
    {
        return(true);
    }
    else
    {
        return(false);
    }
}

Однако, если я назову это так:

if(callajax())
{
    //  Do something
}
else
{
    // Something else
}

Первый никогда не называется.

Если я добавлю alert(textStatus) в функцию complete, я получу истину, но не раньше, чем эта функция вернет undefined.

Можно ли передать функцию обратного вызова моему методу callajax()? Как:

callajax(function(){// success}, function(){// error}, function(){// complete});

1 Ответ

7 голосов
/ 11 мая 2010

complete является функцией обратного вызова . Он будет вызываться объектом Ajax - асинхронно! - когда операция завершена. Вы не можете перехватить результат обратного вызова, это может сделать только объект Ajax.

Ваша callajax() функция - вы не показываете эту функцию, но я предполагаю, что она просто делает вызов Ajax - не может вернуть результат вызова (= заголовки и тело ответа), так как вызов еще не завершен при выходе из функции callajax().

Обновление: Это также вполне возможно для выполнения синхронных вызовов AJAX. Спасибо @Andris за указание на это. В jQuery вам нужно установить для параметра async значение false: Docs здесь . Однако даже те, которые, насколько я вижу, используют стандартные функции обратного вызова, поэтому желаемый метод возврата false или true может все еще не работать.

...