2012-07-25 24 views
1

我有一个按钮,触发一个Ajax功能点击这样的:JQuery的阿贾克斯.load负载的东西快速

$.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正在更新,它只是更新太早,我想。

+0

可能会在客户端上得到缓存。禁用缓存并尝试。 – asawyer 2012-07-25 22:28:57

+0

页面返回之前是否对数据库进行了更改? – MrOBrian 2012-07-25 22:30:07

回答

2

你的refreshMenus($(this));正好在完成ajax之前被调用,并将$(this)保存到ajax函数以外的变量中。因此,尝试这种

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

,我认为你应该使用

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

如果我是正确的,所发生的情况是$就走的是结果refreshMenus($(this))它的回调函数(它甚至可能会引发如果有错误你看看控制台)。这意味着在AJAX甚至开始之前,refreshMenus($(this))实际上被称为。此外,你会想要使用jQuery的context或做一些其他答案提及和变化$(this)

0

使用完整的处理程序(始终),而不是成功(完成),并添加一个超时,如果它是neccessary,但它should'nt是作为服务器端应该由调用回调的时间内完成:

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  
});​ 
0

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

您遇到的问题是,$(this)元素你”重新传递给refreshMenus不是您想要更新的列表元素(或者触发按钮),它是xhr(ajax)对象,因此refreshMenus方法没有获取它需要更新的元素。

还等什么Cabloo说是很好的建议 -

success:function(){ refreshMenus($('#listid')); }