加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 缓存Ajax调用

发布时间:2020-12-13 15:58:06 所属栏目:PHP教程 来源:网络整理
导读:我在构建的应用程序中遇到问题.我已经阅读了许多关于类似问题的线索,并应用了这些线程中给出的建议.但问题仍然存在,因此我写了这个. 设置如下: 我有3个php文件:index.php,step_one.php和calculation.php. 从index.php,我通过Ajax调用成功加载了step_one.ph
我在构建的应用程序中遇到问题.我已经阅读了许多关于类似问题的线索,并应用了这些线程中给出的建议.但问题仍然存在,因此我写了这个.

设置如下:

>我有3个php文件:index.php,step_one.php和calculation.php.
>从index.php,我通过Ajax调用成功加载了step_one.php,如下所示:

$(document).ready(function () {
        var nocache = Math.random() * new Date().getTime() + Math.random();
            $("#bookings").click(function () {
                $.ajax({
                    url: 'step_one.php?cach='+nocache,type: 'post',cache: false,success: function (data) {
                        $("#contentLeft").html(data);
                    }
                });
            });
        });

注意:step_one.php是html表单.然后在step_one.php中,我在表单中输入数据并通过另一个Ajax调用将表单数据发送到calculation.php,如下所示:

$("#viewprice").click(function () {
    var nocache = Math.random() * new Date().getTime() + Math.random();
    $.ajax({
        url: 'calculate_quote.php?cache=' + nocache,dataType: 'json',data: $("#stepOneForm").serialize(),success: function (data) {
            console.log(data);
            $(".quote").append(data);
            $(".quote").show();
            document.getElementById("price").value = data;
        }
    });
});

calculate.php文件,根据收到的数据计算价格,并将json返回到step_one.php.这是我从calculate.php返回json的方法:

header('Content-Type: application/json');
header('Cache-Control: no-cache,no-store,must-revalidate'); // HTTP 1.1.
header('Expires: 0'); // Proxies.
echo json_encode($data);

注意:我第一次点击#viewprice按钮,价格正确并成功返回到step_one.php.但是,在step_one.php中输入新数据并重新单击#viewprice按钮时,compute.php不会返回任何内容.当我检查网络数据时,我看到compute.php在那里被复制,只有第一个Ajax调用将响应中的数据.

而这在xamp的本地机器上运行.
你能帮忙吗?我在这做错了什么?

解决方法

我发现了让我头疼的错误.这是一个逻辑错误.

背景

出于安全原因,我在表单中使用令牌.因此,对于每个表单,我在页面加载时生成一个令牌并将其存储在会话中.然后当表单发送其数据(包括令牌)时,我首先检查收到的令牌是否在会话中 – 如果找到令牌,我然后使用接收值并使用它们来计算$data然后我将它传递给json_encode函数.找到令牌后,我将其删除.

因此,我没有缓存compute.php,因为我的Ajax代码是正确的.相反,问题是当我重新发送表单数据以进行重新计算时.在重新发送期间,会话中的令牌已被删除;因此,在会话中找不到我用表单数据发送的令牌.因此,数据没有计算,也没有返回.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读