缓存Ajax调用

时间:2015-09-28 09:42:16

标签: php jquery json ajax caching

我正在构建的应用程序中存在问题。我已经阅读了许多关于类似问题的线索,并应用了这些线程中给出的建议。但问题仍然存在,因此我写了这个。

设置如下:

  1. 我有3个php文件:index.phpstep_one.phpcalculation.php
  2. 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);
                        }
                    });
                });
            });
    
  3. 注意: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,
            type: 'post',
            dataType: 'json',
            cache: false,
            data: $("#stepOneForm").serialize(),
            success: function (data) {
                console.log(data);
                $(".quote").append(data);
                $(".quote").show();
                document.getElementById("price").value = data;
            }
        });
    });
    

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

    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按钮时,calculation.php不会返回任何内容。当我检查网络数据时,我看到calculation.php在那里重复,只有第一个Ajax调用将响应中的数据。

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

2 个答案:

答案 0 :(得分:1)

我发现了让我头疼的错误。这是逻辑错误。

<强>背景

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

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

答案 1 :(得分:0)

Caching Ajax POST requests

认为以上链接有用&gt;&gt;&gt;