我如何 return 来自 jQuery.steps 的 AJAX 调用的结果?

How do I return the result of an AJAX call from jQuery.steps?

我知道一个非常相似的问题是 ,但那里的答案对我不起作用。我不知道我是否做错了什么,或者在过去 18 个月中 jQuery 或 jQuery.steps 是否发生了变化。

onStepChanging 方法中,我有以下代码(为清楚起见,省略了检查我们正在进行的步骤等的代码)...

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

但是,这不起作用。 onStepChanging 方法 returns 在 AJAX 调用之前执行,因此忽略 success 回调中的 return 语句。根据链接 post 中的答案,这应该有效。

并不是说我想同步执行此操作,而是我尝试将 async: false 添加到 AJAX 调用中,但没有任何区别。

任何人知道我如何让它工作吗?我正在使用 jQuery.steps v1.0.1(今天下午下载,所以他是最新版本)和 jQuery v1.12.3.

我觉得你很接近。

关键是您尝试的 "async: false",但是 "return true;" 和 "return false;" 来自 ajax 成功方法只是 return ajax 打电话。 true/false 值与调用堆栈上层的原始 onStepChanging 方法无关。

  • 在 ajax 调用之前创建一个变量,比如 "var response = false;"
  • 然后将 async: false 添加到 ajax 调用
  • 然后在您的成功方法中设置 response = true;
  • 然后在 onStepChanging 方法中返回 return 响应变量。 "return 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;
}

应该可以。