第二个 Ajax 调用已填充成功结果

Second Ajax call already populated with success results

我有一个 Ajax 呼叫是通过按下按钮进行的​​,returns 我一些数据然后关闭并创建一个网格。第一次调用该函数时,会进行 Ajax 调用,返回数据并显示网格。快乐的时光。 然而,对该函数的任何后续调用,其中 none 的数据参数已更改,导致不会对服务器进行 Ajax 调用,并且该函数会直接跳到 'success' 并显示结果来自已填充的成功调用。

更改任何 '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({
    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);
    }
});

说明

缓存主要通过保存调用的 return 值来尝试保存对服务器的调用。

它使用查询的散列作为键来保存它们,因此如果您进行第二个相同的查询,它将直接 return 缓存中的值,即 return第一次编辑。

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

尝试在您的 ajax 调用中添加此内容:

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

这将强制召回 ajax 每次。 欲了解更多信息,请查看以下 link : api.jquery.com/jquery.ajax

您可以将 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 也不会缓存。