【问题标题】:AJAX post request returns same response for different requestsAJAX 发布请求对不同的请求返回相同的响应
【发布时间】:2019-05-07 10:22:48
【问题描述】:

在使用 paypal 结帐时,我遇到了一个问题,后来即使是两个不同的用户也会导致相同的付款。

它发生在创建支付流程中。

我的贝宝结帐设置:

 $.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,但这并不能解决问题。用户可以在两个不同的设备上,这个问题仍然会发生

【问题讨论】:

    标签: ajax caching paypal payment


    【解决方案1】:
    res.header("Cache-Control", "no-cache, no-store, must-revalidate")
    res.header("Pragma", "no-cache")
    res.header("Expires", "0")
    

    Ser 数据正在被缓存,因此取消缓存是解决方案。

    【讨论】:

    • 谢谢,这解决了问题,不会认为节点路由会缓存响应
    • 我对 HTTP 概念有点陌生。我应该将此设置为客户端的请求还是服务器端的响应?
    • res.setHeader() 是 Node.js 的原生方法, res.header() 是 Express 框架中 res.set() 方法的别名。
    猜你喜欢
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    相关资源
    最近更新 更多