javascript - AJAX 调用完成后如何执行操作?

标签 javascript jquery ajax if-statement callback

我尝试在不同的地方调用函数。这就是为什么我返回 true 或 false。 我遇到的问题是在 hasCreditCard 有时间执行调用之前,直接转到 else...

if (hasCreditCard($('#memberId').val())) {
  ...
}
else{
  ...
}

function hasCreditCard(memberId) {
    var url = getHostName() + "/members/" + memberId + "/creditcard";
    jQuery.ajax({
        type: "head",
        url: url,
        contentType: "application/json",
        headers: {
            "Authorization": "Basic " + $.cookie('authorization')
        },
        success: function (data, status, jqXHR) {
            if (jqXHR.status == 200) {
                return true;
            }
            return false;
        },
        error: function (jqXHR, status) {
            return false;
        }
    });
}

最佳答案

因为 AJAX 调用是异步,并且您的 if 语句不会等待调用结束。

两种解决方案:

#1:您可以将回调传递给函数并在成功/错误处理程序中调用此回调:

getCreditCard($('#memberId').val(), function (hasCreditCard) {
  if (hasCreditCard) {
    ...
  } else {
    ...
  }
})

function getCreditCard(memberId, nextStep) {
  ...
  jQuery.ajax({
    ...
    success: function (data, status, jqXHR) {
      if (jqXHR.status == 200) {
        nextStep(true)
        return
      }
      nextStep(false)
    },
    error: function (jqXHR, status) {
      nextStep(false)
    }
  })
}

#2:您可以创建另一个全局函数并在成功/错误处理程序中调用此函数:

getCreditCard($('#memberId').val())

function getCreditCard(memberId) {
  ...
  jQuery.ajax({
    ...
    success: function (data, status, jqXHR) {
      if (jqXHR.status == 200) {
        nextStep(true)
        return
      }
      nextStep(false)
    },
    error: function (jqXHR, status) {
      nextStep(false)
    }
  })
}

function nextStep(hasCreditCard) {
  if (hasCreditCard) {
    ...
  } else {
    ...
  }
}

关于javascript - AJAX 调用完成后如何执行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41255395/

相关文章:

javascript - 使用 JSR223 断言写入文件

javascript - JS测量ajax完成时间

javascript - Angular.js 从 Controller 访问模型(服务器验证)

javascript - 将参数传递给 ANT javascript 任务?

javascript - 将ajax数据返回给不同链接对应的不同函数

javascript - 获取删除请求无法正常工作

javascript - 一旦将设置值发布为 null

javascript - html() 设置后触发自定义事件

jQuery 将高度动画设置为自动

javascript - 使用 jQuery FileReader 获取宽度和高度?