我的网站页面中有一个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”
答案 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?