我正在StripeCheckout.configure({ })
参数token
进行AJAX调用,如下所示:
StripeCheckout.configure({
...,
token: function(stripeToken) {
$.post( url, {
// post data
}, function(data) {
console.log("data", data);
return data;
});
}
});
在接收AJAX呼叫的URL(让我们称之为/charge
)中,我有以下代码:
const charge = (req, res) => {
const {
// get AJAX post data, e.g amount, description, STRIPE_TOKEN, etc
} = req.body
return stripe.charges.create({
amount: amount,
currency: 'gbp',
source: STRIPE_TOKEN,
description: description,
})
.then((charge) => {
const {params} = charge // get various parameters from the successful charge data to be passed into book()
return book(params) // promise function which goes to an external provider
.then((data) => {
return data // data returns from book and is then lost between here and the original AJAX callback
})
}).catch((err) => {
console.log(err)
})
}
从评论中可以看出,charge函数中的data
是正确的,但是在该promise与原始AJAX调用之间,它丢失了,AJAX调用什么都没有。如果我查看Chrome devtools中的网络请求,则表示charge
收到了数据,但AJAX调用超时,因为它没有收到响应数据。
我想我已经看了太长时间,并且可能犯了一个非常容易和愚蠢的错误。
答案 0 :(得分:1)
在评论中借助@Bergi帮助解决这个问题(感谢Bergi!)。
以下代码对我有用,将promise的更新发送回原始的Ajax请求:
const charge = (req, res) => {
// rest of the promise
.then((data) => {
res.json(data)
})
}).catch((err) => {
console.log(err)
})
}
原因主要是,AJAX请求正在访问页面(在我的情况下为/charge
),正在进行获取数据的工作,但返回它什么也没做,就像在前面一样 - 结束应用程序,除非你正在做一些事情(分配给变量,用该数据运行另一个函数等),它将会丢失。它需要以JSON格式输出到页面,因此请求可以看到它。