2011-11-07 48 views
0

这是我想在用户单击链接时执行的事件的列表。发布并等待返回onclick事件

  • 用户单击搜索结果中的链接。
  • 会话在服务器上使用jQuery post进行更新。
  • 当会话更新时,搜索将保存到localStorage。
  • 完成后,请点击被点击的链接。

下面的代码:

// Manually save the lastest search result and update session at server 
$('a.e').click(function (event) { 
    event.preventDefault(); 
    if (('localStorage' in window) && window['localStorage'] !== null) { 
     $.post("Home/UpdateSession/", $("form").serialize()); 
     var form = $("#myTable").html(); 
     localStorage.setItem('myTable', form); 
     form = null; 
    } 
    $.get($(this).attr('href')); 
}); 

我得到一个错误说,本次会议没有更新的服务器,当我点击此链接。如果我在帖子中调用的动作中放置一个断点,它不会在那里打破。是否可以按照此顺序执行这些步骤,或者是在帖子之前调用的点击事件?

+0

你想要访问什么页面?首页/ UpdateSession /指数。???或Home/UpdateSession。 –

+0

我试图在帖子中访问ActionResult'UpdateSession',然后获取被点击的链接的href。 – Niklas

+0

所以这是你正在使用的.NET?此外,尝试Home/UpdateSession的网址,而不是主页/ UpdateSession/ –

回答

2

在回答关于马特桥后您的意见,做在卸载一个Ajax调用你有喜欢的async: false选项完成Ajax调用:

$(window).bind('unload', function(){ 
    $.ajax({ 
     cache: false, 
     async: false, 
     url: "test.php" 
    }); 
}); 
+0

谢谢,我认为异步:错误是问题所在。我发布了完整的解决方案来解决我的特定问题 – Niklas

1

jQuery的post()函数异步发生。在将值保存到本地存储并导航到结果之前,您需要等待帖子完成。现在发生的事情是浏览器在发布完成之前离开页面。

post()的第三个(可选)参数是一个回调;你可以传递一个在帖子完成时运行的函数。您需要将该帖子后的所有操作置于该回调函数中,例如

if (('localStorage' in window) && window['localStorage'] !== null) { 
    $.post("Home/UpdateSession/", $("form").serialize(), function() { 
     var form = $("#myTable").html(); 
     localStorage.setItem('myTable', form); 
     form = null; 
     $.get($(this).attr('href')); 
    }); 
    return false; // prevent normal link behavior 
} 
else 
{ 
    return true; 
} 

编辑:添加return false防止正常链接行为

+0

嗯,它仍然无法正常工作。如果我将'$('a.e')'改为'$(window)',将'.click'函数改为'.unload',那么效果很好。但我想仅将此操作应用于链接点击。 – Niklas

+0

如果我删除'$ .get($(this).attr('href'));'它仍然执行重定向。认为preventDefault会阻止它? – Niklas

+0

查看我的编辑 - 将“返回false”添加到点击处理函数以防止链接被浏览器跟随。 –