ajax - AJAX 发布请求对不同的请求返回相同的响应
问题描述
在使用贝宝结帐时,我遇到了后来即使是两个不同的用户也会导致相同的付款的问题。
它发生在创建支付流程中。
我的贝宝结帐设置:
$.ajaxSetup({ cache: false });
paypal.Button.render({
env: 'production',
locale: 'en_US',
style: {
color: 'silver',
size: 'medium',
label: 'checkout',
shape: 'rect',
layout: 'vertical',
},
payment: (data, actions) => {
return new Promise((resolve, reject) => {
$.ajax({
url: '/p/create-payment/',
dataType: 'json',
data: {
body: body
},
method: 'POST',
headers: { 'X-CSRF-Token': '{{csrfToken}}' }
})
.done(( data ) => {
resolve(data.id)
reject("")
})
})
},
onAuthorize: (data, actions) => {
return new Promise((resolve, reject) => {
$.ajax({
url: '/p/execute-payment/',
dataType: 'json',
data: {
paymentID: data.paymentID,
payerID: data.payerID,
body: body,
},
method: 'POST',
headers: { 'X-CSRF-Token': '{{csrfToken}}' }
})
.done(( data ) => {
if(data.status === 'success') {
resolve(window.open('success',"_self"))
}else if(data.status === 'pending'){
resolve(window.open('pending, "_self"))
} else reject(window.open('failure', "_self"))
})
})
},
onError: (err) => {
window.open('paymentFailure', "_self");
console.error(err)
}
}, '#paypal-button');
第一次尝试:我去我的页面并打开贝宝结帐,应该收到付款的人是正确的,金额和其他一切,请求本身大约需要 3-4 秒
第二次尝试:第二次打开页面时,我点击结帐按钮,这次请求需要 0.2-0.4 秒,数据与第一次创建的付款完全相同,即使 paypal 的 PAY-ID 相同
我可以将 ajax 请求返回的数据记录到 /p/create-payment 创建付款第一次工作正常,如上所述,但第二次我看到的数据与第一次完全相同。
我想指出我的服务器上有日志,并且在第二次付款创建过程中它们没有显示,就好像它没有请求并立即完成一样。
我也一直在尝试清除浏览器的缓存/cookie,但这并不能解决问题。用户可以在两个不同的设备上,这个问题仍然存在
解决方案
res.header("Cache-Control", "no-cache, no-store, must-revalidate")
res.header("Pragma", "no-cache")
res.header("Expires", "0")
Ser 数据正在被缓存,因此取消缓存是解决方案。
推荐阅读
- java - java中的代码为ImageView设置图像?
- angular - Angular 8 测试 - 未找到 Devextreme Grid 子节点
- osgi - 使用服务组件运行时导出多个服务
- flutter - 已定义如何在文件小部件之外使用全局键
- laravel - Laravel - 汇总总和仅适用于每页
- python - 导入模块的问题:ModuleNotFoundError
- java - 在 jenkins 管道中连接到 MySQL 容器
- azure - 为什么 MSAL loginPopup 以“应用程序客户端请求资源上不存在的范围”响应?
- android - 我可以使用 Kotlin 模拟单击 Android 设备上的物理按钮吗?
- git - 我想将文件夹中的所有内容移动到层次结构中的上一级并删除 GitHub 中的上一个文件夹