Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用$.ajax正在更改我的窗口滚动?_Javascript_Jquery_Ajax_Scroll - Fatal编程技术网

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

Javascript 调用$.ajax正在更改我的窗口滚动?,javascript,jquery,ajax,scroll,Javascript,Jquery,Ajax,Scroll,我遇到了一个很奇怪的虫子。。。一旦我的JS代码通过jQuery$.ajax调用进入我的success函数,我窗口上的滚动位置就会跳到页面底部。这对我来说是一个真正的问题,因为我正在处理一个移动页面加载,我不想看到这种不和谐的动画 我通过使用console.debug$window.scrollTop编写代码来跟踪它;调用,并且在进入成功回调之后,在执行任何回调代码之前,它会从0持续地更改为数百个错误中的某个数字 我在Safari和Chrome中遇到了同样的问题,这两款浏览器的用户代理都设置为iO

我遇到了一个很奇怪的虫子。。。一旦我的JS代码通过jQuery$.ajax调用进入我的success函数,我窗口上的滚动位置就会跳到页面底部。这对我来说是一个真正的问题,因为我正在处理一个移动页面加载,我不想看到这种不和谐的动画

我通过使用console.debug$window.scrollTop编写代码来跟踪它;调用,并且在进入成功回调之后,在执行任何回调代码之前,它会从0持续地更改为数百个错误中的某个数字

我在Safari和Chrome中遇到了同样的问题,这两款浏览器的用户代理都设置为iOS5

以下是问题领域的一个片段:

  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;

        // ...
有人知道这是怎么回事吗?我不知所措


请参阅此处的完整文件:

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

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

$("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是异步启动的,所以在调用时其他东西都在执行。为了排除随后发生的其他事情重置滚动位置的可能性,您可以在$.ajax代码中输入async:false

我们能看到一个完整的工作示例吗?是否有其他代码可能在$.ajax调用之后、回调之前执行?首先是什么触发ajax请求?你能展示一下上面的代码是如何调用的吗?把整个文件作为上述问题的要点。我是在点击浏览器的后退按钮时得到这个消息的,所以它会被调用。我想问题是在.ajax调用之后。在AJAX之前,scrollTop为0,在一段时间后出现的成功方法中,scrollTop为616。这与AJAX本身无关,它只是意味着AJAX请求和AJAX响应之间出现了问题。@neezer等一下。。。当您通过浏览器返回时会触发此命令?它会不会转到您上次在该页面的滚动位置?我已经用$window.scrollTop0尝试过了;没有成功:相同的行为。$'html.top0;也没什么区别。还有其他建议吗?你可以试试直接的javascript:window.scrollTo0,0;注意,它是“To”而不是“Top”。不过,这可能不起作用:另一个不起作用可能意味着在这一点之后发生的一切都在发生。您可以尝试将它放在$.ajax上的完整事件中。这将确保它发生在ajax调用中的其他事情之后。我会用这个更新我的答案。