我有以下代码:
$.ajax({
cache: false,
url: "/Administration/" + entity + "s/Update",
data: { pk: pk, rk: rk, fld: type, val: val },
success: function () {
disableLoadingIcon();
if (idArr.substr(0, 8) == 'Position') {
location.reload();
}
}
});
当用户更改某些数据时,代码会更新数据库。在此之前有代码可以选择数据值并且一切正常。
当用户更改位置列时,数据库会发生变化,我想触发刷新屏幕(这是按位置排序的报告屏幕)。刷新工作但看起来它不同步。我在成功区域中有location.reload()但是有可能在Ajax完成之前运行吗?
是否有可能在数据库正确更新之前进行此类刷新?当我从浏览器手动刷新页面时,数据始终以正确的顺序显示。
答案 0 :(得分:2)
您的文档已缓存。你应该使用
location.reload(true)
使用清除缓存重新加载。
答案 1 :(得分:1)
默认情况下,AJAX是异步的。一旦发出调用,其余代码将继续执行。如果在ajax调用返回其数据之前location
的值被更改,则成功函数将使用当前的当前执行值的位置,这现在与它的不同之处当ajax调用开始时。
成功代码在ajax调用返回之前不会运行,所以这不是问题。但是你依赖于在你开始ajax之前和它完成的时间之间没有改变的位置。
答案 2 :(得分:1)
API
jquery
中有一个ajaxComplete
。每当ajax调用完成时,都会调用它。
$.ajaxComplete(function(){
//do something
});
答案 3 :(得分:1)
无论你在success
处理程序中写什么,只有在你完成对服务器页面的ajax请求后才会执行。因此,您可以在该处理程序中加载更新的内容。您可以使用参数接受成功函数的响应,并检查您的交易是否成功。
在您的服务器页面中,在进行数据库更新后,您可以返回true或false。
$.ajax({
cache: false,
url: "/Administration/" + entity + "s/Update",
data: { pk: pk, rk: rk, fld: type, val: val },
success: function (data) {
// This will be excuted only after you receive a response from your server page
if(data=="true") //db updated properly
{
disableLoadingIcon();
if (idArr.substr(0, 8) == 'Position') {
location.reload();
}
}
else
{
alert("Error in updating the data");
}
}
});