如果Ajax请求没有完成,html链接无法点击

时间:2009-12-24 03:35:47

标签: javascript jquery ajax

我的网站页面中有一个jquery ajax请求,每个页面都需要将此请求发布到服务器以获取状态。但它有一个问题:我在浏览器中打开页面后,在此请求返回数据之前,我的页面所有链接都无法正常工作,它们无法点击。但它渲染正常。所以有人有解决方案吗?例如:使页面在加载页面或其他页面后加载此脚本。

$(function(){      
      var login_status;
      $.ajax({
        async:false,
        url:<%= url(:login_status_header_session, :from => from_uri).to_json %>,
        dataType:"html",
        success:function(data, textStatus){
          login_status = data;
        }
      });
      if(login_status) {
        $(".loginDetails p .login_status").html(login_status);
      } else {
        $(".loginWrapper").remove();
      }
  });

这是login_status_header肌动蛋白:

self.headers [“Cache-Control”] =“no-cache,must-revalidate”
self.headers [“Expires”] =“0”partial“session_header”,
:format =&gt; “HTML”

3 个答案:

答案 0 :(得分:3)

首先,删除async:false,行。这样,在处理AJAX请求时,接口将继续响应。其次,将结果检查移到success函数中 - 否则它会在请求完成之前运行,因此login_status尚未设置(因此默认为null,将其视为false )。

$(function(){      
      var login_status;
      $.ajax({
        url:<%= url(:login_status_header_session, :from => from_uri).to_json %>,
        dataType:"html",
        success:function(data, textStatus){
          login_status = data;
          if(login_status) {
            $(".loginDetails p .login_status").html(login_status);
          } else {
            $(".loginWrapper").remove();
          }
        }
      });
  });

答案 1 :(得分:2)

如果没有更多信息,我只能猜测,我的猜测是,因为您使用的是async: false,所以界面没有响应。是否有理由同步执行请求?如果没有,请尝试删除async:false并查看是否有效。

答案 2 :(得分:1)

嗯...没有仔细检查你的代码,如果这应该在加载页面时很快发生,为什么不把它放在服务器端,并在第一时间生成正确的HTML?即使用PHP或其他任何使用它并忘记AJAX?