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