1

我正在使用 jsp、jquery 和 struts。我在理解 ajax 请求的登录页面重定向时遇到问题。我试图在 XHR 选项卡上查看浏览器上的请求,它在标题中给了我 302 状态代码。我无法理解如何重定向。我的方法

  1. 该应用程序具有检查用户是否登录的功能,并具有重定向到登录网址的功能。
  2. 否则做一些其他处理。

登录后如何返回同一页面?有什么办法吗?同样对于服务器端的重定向,我使用的是 Response.redirect()。当我在客户端调试代码和响应时,ajax 函数中的错误函数被执行而不是成功函数。有人可以解释如何从服务器捕获响应吗?

function buttonpress(param1,param2){
  $.ajax({
    type:"GET",
    data:{
      X:param1,
      Y:param2,
    },
    url:"/application",
    success:function(){
      alert("success message");
    }
    error:function(){
      alert("error message")
    }
  });
}
4

4 回答 4

2
success:function(){
    //current page URL
    var ref = document.URL;
    location.href = '/login/?ref=' + ref;
}

您可以使用变量“ref”返回同一页面

于 2013-08-28T03:30:34.600 回答
1

请注意,当您使用 ajax 调用服务器并接收重定向响应时。浏览器不会重定向,但会自动在重定向位置检索内容,您的success函数最终会从重定向位置传递内容。对于 ajax 请求,如果用户未登录,则不应使用重定向响应,401 Unauthorized而应返回 a,浏览器将在您的回调中处理此问题。以下是步骤:

  • 检查用户是否登录
  • 如果用户未登录,请检查标头X-Requested-With: XMLHttpRequest(这表示 ajax 请求)
  • 如果找到但未通过身份验证,则以 401(对于 ajax 请求)响应,否则以 302(对于非 ajax 请求)响应。

并且您的 ajax 回调可以检查是否有 401 响应,设置location.href为您的登录页面。您可以returnUrl在登录页面中有类似查询字符串参数的内容,如果有,您可以将其设置为当前页面以在登录后重定向到该页面。客户端示例代码:

$.ajax({
    type:"GET",
    data:{
      X:param1,
      Y:param2,
    },
    url:"/application",
    success:function()
    {
      alert("success message");
    },
    error:function()
    {
      alert("error message")
    },
    statusCode: {
     401: function() {
      location.href = '/login/?returnUrl=' + document.URL;
    }
 });
于 2013-08-28T03:58:33.537 回答
0

jQuery(文档).ready(函数(){

        jQuery('#dialog').show(false);
        jQuery('#MsgDel').show(false);
        jQuery("#dialog").dialog({
            bgiframe: true, autoOpen: false, height: 250, modal: true, width: 250,
            buttons: {
                "Delete": function () {

                    var txtValue = $("#<%=txtid.ClientID %>").val();
                    var txtrea = $("#<%=txtreason.ClientID %>").val();
                    if (txtrea == '') {

                    }
                    else {
                        Delete(txtValue, txtrea);
                        $(this).dialog("close");
                    }
                },
                "Cancel": function () {
                    $(this).dialog("close");
                }
            },
            close: function () {
                $('#txtreason').val("");

            }
        });
    }); 

</script>
于 2013-12-25T12:46:14.740 回答
0
<script type="text/javascript">
    jQuery(document).ready(function () {
        jQuery('#MsgDel').show(false);
        jQuery("#MsgDel").dialog({
            bgiframe: true, autoOpen: false, height: 150, modal: true, width: 300,
            buttons: {
                "OK": function () {
                    $(this).dialog("close");
                      --To Reload Page Again After Success Function 
                    window.location.href = "DispatchInstructionList.aspx";
                }
            },
            close: function () {
            }
        });
    }); 

</script>
于 2013-12-25T12:49:43.070 回答