Как вернуть результат вызова AJAX из jQuery.steps? - PullRequest
0 голосов
/ 26 апреля 2018

Я знаю, что очень похожий вопрос был задан и отвечен здесь , но ответ там не работает для меня.Я не знаю, делаю ли я что-то неправильно, или произошли изменения в jQuery или jQuery.steps за последние 18 месяцев.

В методе onStepChanging у меня есть следующеекод (код, чтобы проверить, на каком шаге мы и т. д. для ясности опущен) ...

    $.ajax({
      url: '/Home/ValidatePostcode',
      type: "GET",
      data: {
        postcode: postcode
      },
      success: function (result) {
        if (result) {
          return true;
        } else {
          return false;
        }
      }
    });

Однако это не работает.Метод onStepChanging возвращается до вызова AJAX, поэтому оператор return внутри обратного вызова success игнорируется.Согласно ответу в связанном посте, это должно сработать.

Не то чтобы я хотел сделать это синхронно, но я пытался добавить async: false к вызову AJAX, но это не имело никакого значения.

Кто-нибудь знает, как я могу заставить это работать?Я использую jQuery.steps v1.0.1 (скачал сегодня днем, поэтому он последняя версия) и jQuery v1.12.3.

1 Ответ

0 голосов
/ 26 апреля 2018

Я думаю, что вы близки.

Ключом является "async: false", который вы пробовали, однако ваше "return true;"и "вернуть ложь";изнутри ajax success метод возвращает только вызов ajax.Значения true / false не связаны с исходным методом onStepChanging в стеке вызовов.

  • Создайте переменную перед вызовом ajax, скажем "var response = false;"
  • Затем добавьте async: false к вызову ajax
  • Затем изнутриВаш метод успеха установил response = true;
  • Затем верните в метод onStepChanging возвращенную переменную response."обратный ответ"

Все вместе может выглядеть примерно так:

onStepChanging: function (...)
{
    var response = false;

    $.ajax({
        url: '/Home/ValidatePostcode',
        type: "GET",
        async: false,
        data: {
            postcode: postcode
        },
        success: function (result) {
            if (result) {
                response = true;
            }
        }
    });

    return response;
}

Это должно сработать.

...