我如何确定我的Ajax调用已完全完成?

时间:2012-01-08 16:20:05

标签: javascript jquery

我有以下代码:

   $.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完成之前运行吗?

是否有可能在数据库正确更新之前进行此类刷新?当我从浏览器手动刷新页面时,数据始终以正确的顺序显示。

4 个答案:

答案 0 :(得分:2)

您的文档已缓存。你应该使用

location.reload(true)

使用清除缓存重新加载。

答案 1 :(得分:1)

默认情况下,AJAX是异步的。一旦发出调用,其余代码将继续执行。如果在ajax调用返回其数据之前location的值被更改,则成功函数将使用当前的当前执行值的位置,这现在与它的不同之处当ajax调用开始时。

成功代码在ajax调用返回之前不会运行,所以这不是问题。但是你依赖于在你开始ajax之前和它完成的时间之间没有改变的位置。

答案 2 :(得分:1)

API jquery中有一个ajaxComplete。每当ajax调用完成时,都会调用它。

$.ajaxComplete(function(){
//do something
});

参考:http://api.jquery.com/ajaxComplete/

答案 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");
           }

        }
    });