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

时间:2016-04-18 08:57:31

标签: javascript jquery ajax javascript-objects

我通过按下按钮进行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概念我想念但我似乎无法指出它。 任何人都可以帮助我朝着正确的方向前进吗?

3 个答案:

答案 0 :(得分:1)

您是否尝试使用以下命令禁用缓存:

$.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);
    }
});

<强>说明

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

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

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

答案 1 :(得分:0)

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

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

这将强制每次召回ajax。 有关更多信息,请查看以下链接: api.jquery.com/jquery.ajax

答案 2 :(得分:0)

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