首页 > 解决方案 > 如何从 jQuery.steps 返回 AJAX 调用的结果?

问题描述

我知道在这里提出并回答了一个非常相似的问题,但那里的答案对我不起作用。我不知道我是否做错了什么,或者过去 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方法在 AJAX 调用之前返回,因此回调中的return语句success被忽略。根据链接帖子中的答案,这应该可行。

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

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

标签: jqueryjquery-steps

解决方案


我认为你很接近。

关键是您尝试过的“async:false”,但是您的“return true;” 和“返回错误;” 从 ajax 成功方法内部只返回到 ajax 调用。真/假值与调用堆栈上的原始 onStepChanging 方法无关。

  • 在 ajax 调用之前创建一个变量,比如“var response = false;”
  • 然后将 async: false 添加到 ajax 调用中
  • 然后从你的成功方法中设置 response = true;
  • 然后返回 onStepChanging 方法返回响应变量。“回复回复;”

所有这些可能看起来像这样:

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;
}

那应该行得通。


推荐阅读