【问题标题】:Second Ajax call already populated with success results第二个 Ajax 调用已填充成功结果
【发布时间】:2016-08-09 22:14:08
【问题描述】:

我有一个 Ajax 调用是通过按下按钮返回给我一些数据然后关闭并创建一个网格。第一次调用该函数时,会进行 Ajax 调用,返回数据并显示网格。快乐的时光。 但是,对该函数的任何后续调用(其中未更改任何数据参数)都会导致未对服务器进行 Ajax 调用,并且该函数会直接跳至“成功”,并且已填充成功调用的结果。

更改任何“postParameters”都会导致 Ajax 调用成功并刷新数据。

function btnClick(){
    //blah blah
    getGridData();
}

function getGridData() {
    var postParameters =
    {
        SiteID: "@Model.SiteID",
        DateFilterFrom: $("#datepickerFrom").val(),
        DateFilterTo: $("#datepickerTo").val(),
        CustomerFilter: $("#customers").val()
    };
    $.ajax({
        url: "@Url.Action("SalesForecast_Read", "Planning")",
        type: "GET",
        contentType: "application/json; charset=utf-8",
        data: postParameters,
        dataType: "json",
        success: function (results) {
            createHighlights(results.Highlights);
            createGrid(results.Entries);
        },
        error: function (e) {
            alert(e.responseText);
        }
    });
};

我知道我一定缺少一个重要的 Javascript 概念,但我似乎无法确定它。 任何人都可以帮助我找到正确的方向吗?

【问题讨论】:

  • 我认为这里存在缓存问题。应该有一个选项专门要求在 ajax 查询中不缓存
  • 其实就是:cache: false,

标签: javascript jquery ajax javascript-objects


【解决方案1】:

尝试在你的 ajax 调用中添加这个:

$.ajax({
  cache: false,
  //other options...
});

这将强制每次调用 ajax。 欲了解更多信息,请查看以下链接: api.jquery.com/jquery.ajax

【讨论】:

  • 它有什么作用?有这方面的文件吗?它对取得成功有什么帮助?
  • 显然它会禁用 ajax 请求的缓存......并且每次都会强制调用 ajax。如需更多信息,请查看以下链接:api.jquery.com/jquery.ajax
  • 你为什么不编辑你的答案添加信息?它将大大提高答案的质量。
【解决方案2】:

您可以将 cache: false 添加到您的 ajax 请求中。

$.ajax({
    url: "@Url.Action("SalesForecast_Read", "Planning")",
    type: "GET",
    contentType: "application/json; charset=utf-8",
    data: postParameters,
    dataType: "json",
    cache:false,
    success: function (results) {
        createHighlights(results.Highlights);
        createGrid(results.Entries);
    },
    error: function (e) {
        alert(e.responseText);
    }
});

IE 可能不会听你的。为此,您可以在 POST 参数中添加一个字段,在其中添加当前时间(以毫秒为单位),因此即使 IE 也不会缓存。

【讨论】:

    【解决方案3】:

    您是否尝试过禁用缓存:

    $.ajax({
        url: "@Url.Action("SalesForecast_Read", "Planning")",
        type: "GET",
        cache: false,
        contentType: "application/json; charset=utf-8",
        data: postParameters,
        dataType: "json",
        success: function (results) {
            createHighlights(results.Highlights);
            createGrid(results.Entries);
        },
        error: function (e) {
            alert(e.responseText);
        }
    });
    

    说明

    缓存基本上试图通过保存调用的返回值来保存对服务器的调用。

    它使用查询的哈希值作为键保存它们,因此如果您进行第二次相同的查询,它将直接从缓存中返回值,也就是第一次返回的值。

    如果禁用它,它会向服务器询问每个查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多