我有一个需要登录的服务器端功能 . 如果用户已登录,则该功能将在成功时返回1 . 如果没有,该函数将返回登录页面 .
我想使用Ajax和jQuery调用该函数 . 我所做的是使用普通链接提交请求,并在其上应用单击功能 . 如果用户未登录或函数失败,我希望Ajax调用返回true,以便href触发 .
但是,当我使用以下代码时,该函数在Ajax调用完成之前退出 .
如何将用户正常重定向到登录页面?
$(".my_link").click(
function(){
$.ajax({
url: $(this).attr('href'),
type: 'GET',
cache: false,
timeout: 30000,
error: function(){
return true;
},
success: function(msg){
if (parseFloat(msg)){
return false;
} else {
return true;
}
}
});
});
5 回答
如果您不希望立即返回
$.ajax()
函数,请将async
选项设置为false
:但是,我会注意到这与AJAX的观点相反 . 此外,您应该在
error
和success
函数中处理响应 . 只有在从服务器收到响应时才会调用这些函数 .底层的XMLHttpRequest对象(由jQuery用于发出请求)支持异步属性 . 将其设置为 false . 喜欢
如果您编写
success
函数来加载适当的页面而不是返回true
或false
,我认为事情会更容易 .例如,您可以执行以下操作,而不是返回
true
:这样,当调用成功函数时,页面被重定向 .
我没有使用
$.ajax
而是$.post
和$.get
函数,所以如果我需要等待响应,我会使用:您可能需要考虑在操作挂起时阻止UI,而不是将async设置为false(这通常是错误的设计) .
使用jQuery promise可以很好地实现这一点,如下所示:
有了这个你现在可以做:
UI将阻塞,直到ajax命令返回
见jsfiddle