在onclick事件中发布并等待返回

时间:2011-11-07 14:53:32

标签: jquery asp.net-mvc

这是我想在用户点击链接时执行的事件列表。

  • 用户点击搜索结果中的链接。
  • 使用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'));
});  

我收到错误消息,说我在关注链接时未在服务器上更新会话。如果我在帖子中调用的动作设置断点,它就不会在那里打破。可以按此顺序执行这些步骤,还是在帖子之前调用click事件?

2 个答案:

答案 0 :(得分:2)

在回复你对Matt Bridges帖子的评论时,要在卸载时执行ajax调用,你必须使用async: false选项进行ajax调用,如:

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

答案 1 :(得分: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以防止正常的链接行为