JQuery Ajax .load可以快速加载内容

时间:2012-07-25 22:27:31

标签: jquery

我有一个按钮点击触发的Ajax功能,如下所示:

$.ajax({
            type: "POST",
            dataType: 'json',
            url: "DBDeleteList.php",
            data: {listID: listID},
            success: refreshMenus($(this))
});  

PHP文件成功执行,数据库已更新。

调用refreshMenus()并调用.load()来重新刷新菜单以反映更新的数据库,但是加载函数似乎很快就会加载内容(在注册数据库更新之前)。

基本上发生的是,如果我通过Jquery .load从页面加载内容时它不会刷新。如果我手动刷新页面(例如f5),数据库会更新并正确显示菜单。

这是refreshMenus():

 function refreshMenus( list ) {
    list.parents('li').remove();
    $('#sortableLoader').load(window.location.href + ' #sortableMenu');
 }

Div ID sortableMenu正在更新,我想它只是过早更新。

4 个答案:

答案 0 :(得分:2)

在完成ajax之前立即调用refreshMenus($(this));并将$(this)保留在ajax函数之外的变量中。所以试试这个

var el = $(this);
$.ajax({
    type: "POST",
    dataType: 'json',
    url: "DBDeleteList.php",
    data: { listID: listID }
    success: function(){ 
        refreshMenus(el);
    }
});

答案 1 :(得分:0)

我认为你应该使用

success:function(){ refreshMenus($(this)); }

如果我是正确的,那么实际发生的是$ .ajax将refreshMenus($(this))结果作为其回调函数(如果你看一下控制台,它甚至可能会抛出错误) 。这意味着在AJAX开始之前refreshMenus($(this))实际上被称为 。此外,你要么使用jQuery的context,要么像其他一些提到的答案那样做,并改变$(this)

答案 2 :(得分:0)

使用完整的处理程序(总是)而不是成功(完成),并在必要时添加超时,但它不应该是在调用回调时应该完成服务器端:

var elem = $(this);
$.ajax({
       type: "POST",
       dataType: 'json',
       url: "DBDeleteList.php",
       data: { listID: listID }    
  }).always(function() {
       setTimeout(function() {
          refreshMenus(elem); //`this` will be out of scope
       }, 300); //or whatever you need    
});​

答案 3 :(得分:0)

尝试将refreshMenus($(this))更改为refreshMenus($('#listid'))(使用您要刷新的列表的正确访问器,当然:)

您遇到的问题是,您传递给$(this)的{​​{1}}元素不是您要更新的列表元素(或触发按钮,就此而言),它是xhr(ajax)对象,因此refreshMenus方法没有获取它需要更新的元素。

同样,Cabloo说的是好建议 -

refreshMenus