调用$ .ajax正在改变我的窗口滚动?

时间:2011-12-20 02:31:06

标签: javascript jquery ajax scroll

我遇到了一个非常奇怪的错误......一旦我的JS代码从jQuery success调用进入我的$.ajax函数,我窗口上的滚动邮件会跳转到页面底部。这对我来说是一个真正的问题,因为我正在进行移动页面加载,并且不想要这种不和谐的动画。

我通过console.debug($(window).scrollTop());次调用我的代码来追踪它,并且在进入成功后,它立即从0(应该是什么)变为数百(差)中的某个数字回调,在执行任何回调代码之前。

我在Safari和Chrome中遇到了同样的问题,用户代理设置为iOS 5。


以下是问题区域的片段:

  console.debug($(window).scrollTop()); //= 0
  // store the user's direction
  M.advance = args.advance;

  console.debug($(window).scrollTop()); //= 0
  // setup the existing page for a load event
  M.init_change();

  console.debug($(window).scrollTop()); //= 0
  $.ajax({
    url: args.url,
    success: function(resp) {
      console.debug($(window).scrollTop()); //= 616
      var $resp = $(resp);

      console.debug($(window).scrollTop()); //= 616
      // cycle through and get the elements we want
      for(var i = 0, l = $resp.length; i < l; i++) {
        var $node = $($resp[i]);
        if($node.is('nav[data-role="top-nav"]]')) M.current.nav = $node;

        // ...

任何人都知道这里发生了什么?我在我的智慧结束......


请在此处查看完整文件:https://gist.github.com/1499965

1 个答案:

答案 0 :(得分:0)

假设我对正在发生的事情的评论是正确的:

在$ .ajax成功函数中,当您知道正在重建页面并希望将滚动位置设置为顶部时,请执行以下操作:

$("html").scrollTop(0);

快来思考一下,即使我错了也可以解决它。

<强>更新 您可以将它放在$ .ajax的'complete'事件中,该事件在ajax调用中的成功和错误事件之后触发。

$.ajax({
        url: args.url,
        success: function(resp) {
          // your success code
        },
        error: function() { console.error('something went wrong'); },
        complete: function() {
             window.scrollTo(0,0); // or the $('html').scrollTop(0); from before
      });

测试理念:默认情况下,$ .ajax会异步触发,因此正在进行调用时正在执行其他操作。只是为了排除之后发生的其他事情重置滚动位置的可能性,您可以将async: false,放在$ .ajax代码中。