【问题标题】:stop javascript from caching阻止 javascript 缓存
【发布时间】:2011-01-20 03:23:01
【问题描述】:

我有问题。

我正在使用 zend 创建一个 Web 应用程序,但我的 jquery 和 javascripts 遇到了问题。

我有一个页面显示订单,页面上的脚本标签内写有 jquery 代码。

我正在使用 jquery $.post 加载网站上的每个页面。

我的问题是,当您选择一个新的订单页面(第一次访问订单页面)时,然后单击一个打开 jquery 对话框的按钮以将信息添加到订单中,发送正确的帖子变量;但是,如果您随后转到另一个订单并再次单击添加按钮,它会发送上一个订单的发布变量。

我假设以前的 javascript 信息已被缓存。如果我清空我的缓存,它再次适用于订单,但在它之后的订单上失败。

我正在使用 php 将相关变量(订单 ID)粘贴到内联 javascript 代码中。

我猜这是我的失败。

我不明白的是,javascript 在页面的初始加载中运行良好,因为它随后会使用 ajax 来抓取页面的更多部分。效果很好,但是当我使用按钮时,它会恢复为开始时使用的原始订单 ID。

附上我的代码:

function getFreightTable()
    {
        $.post("order/freighttable", "OrderID=<?= $this->orderID; ?>" , function(data){
            $("#tabs-3").html(data);
        });
    }

    $("#OrderAddFreightButton").live('click',function() {
        $.post("freight/new", "OrderID=<?= $this->orderID; ?>", function(data) {
            $("#orderAddFreightDialog").html(data);
            $("#orderAddFreightDialog").dialog({    
                autoOpen: true, 
                hide: 'slide',
                show: 'slide', 
                title: 'Add New Freight Information',
                closeOnEscape: true,
                close: function(event, ui) 
                { 
                    $("#orderAddFreightDialog").empty();
                    getFreightTable();
                }
            });
        });
        return false;
    });

我的 php 在代码中放置了正确的订单 ID,但 javascript 正在恢复为旧集。

我在网站的另一个部分遇到了类似的问题,并且 javascript 从 3 周前开始恢复为 javascript 代码,即使我在另一台计算机上使用它并清除了缓存。这把我吓坏了。

【问题讨论】:

  • 您的 JS 可能有问题,但我怀疑这是 JS 缓存问题。去你的客户端机器上获取 Fiddler2。当您浏览您的网站时,它可以为您解决此类奇怪的问题提供很多启示
  • 问题出在其他地方。 POST 未缓存。

标签: php javascript jquery zend-framework browser-cache


【解决方案1】:

您可以使用 jQuery 的 .ajax() 指定 cache: false,这将强制请求不缓存请求 - 请注意,您必须重写您的函数以不再使用 $.post 而是使用 $.ajax。如果您不想这样做,您还可以添加到您的 url 以欺骗浏览器:

$.post("url...?c=" + Math.random())

这不是最好的做事方式,但它们都有效。

【讨论】:

    【解决方案2】:

    我试过cache : false

    我已经尝试在末尾添加随机获取变量。

    我知道帖子没有被缓存,但每个页面上的 javascript 必须是因为正在使用的 javascript 是页面初始视图的第一个版本。

    【讨论】:

    • 这些都不起作用。我一直在想这可能与 jqueries .live() 仍在使用的函数有关。
    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 2012-02-27
    • 2017-05-30
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多