gpt4 book ai didi

JavaScript 在从服务器获取数据之前正在处理

转载 作者:行者123 更新时间:2023-12-02 14:51:16 26 4
gpt4 key购买 nike

Stripe 需要在服务器端而不是客户端验证优惠券,因此我编写了一些代码来实现这一点,但我在同步 AJAX/JSON 响应时遇到了一些问题。

在我的 Controller 中,我有一个名为 validate_coupon 的方法,它接受优惠券代码并验证它是否存在于 Stripe 系统中以及是否有效。然后该函数以 JSON 形式返回 true 或 false。

def validate_coupon
code = params[:code]
begin
coupon = Stripe::Coupon.retrieve(code)
rescue => e
coupon = nil
end
valid = coupon.nil? ? false : coupon.valid
respond_to do |format|
format.json { render :json => valid }
end
end

我已将验证优惠券的 JavaScript 放入此函数中。它似乎有效,返回 200 OK 状态,并且此处的 console.log 根据优惠券的有效性正确显示 true 或 false。但是,200 状态和控制台上的日志消息之间存在明显的延迟。

function validateCoupon() {
requestData = "";
$.ajax({
type: "GET",
url: "business/validate_coupon/"+$('#coupon_code').val(),
dataType: "json",
data: requestData,
success: function(response) {
console.log(response);
return response;
}
});
}

这个函数稍后会这样使用:

...
valid = validateCoupon();
console.log("validateCoupon returned " + valid);
if (valid) {
...

当我查看控制台中的日志消息时,我看到的是:

status = 200
validateCoupon returned undefined
true

这表明我正在处理返回的数据,然后再从服务器返回数据。我本来希望 JSON 与状态同时返回。有没有办法让 JavaScript 等待 JSON?

最佳答案

return response; 是传递给 success: 的函数的返回值,而不是通过 validateCoupon -- validateCoupon 在这种情况下函数没有返回值。

为了实现您的目标,您可以按照 @jzaa 的建议进行操作 - 只需稍作修改即可:

function validateCoupon() {
requestData = "";
$.ajax({
type: "GET",
url: "business/validate_coupon/"+$('#coupon_code').val(),
dataType: "json",
data: requestData,
success: function(response) {
console.log(response);
doStuff(response);
}
});
}

function doStuff(response) {
console.log("validateCoupon returned " + response);
}

关于JavaScript 在从服务器获取数据之前正在处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36169886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com