【问题标题】:Access server side text in ajax jQuery在ajax jQuery中访问服务器端文本
【发布时间】:2013-08-29 02:34:05
【问题描述】:

我正在 jsp 中创建一个 jsp 应用程序。如果用户未登录,我将尝试在 ajax 请求上重定向到登录页面。 我的方法

  1. 请求是从将一些参数传递给 url.服务器端代码检查用户是否登录。
  2. 服务器端代码具有构建登录url的功能

我被卡住的问题是我必须将此文本从服务器传递到客户端到 javascript,以便我可以使用类似 window.location.href=url;

谁能解释我如何传递这个 url 并在 ajax 成功函数的回调函数中访问它。

还有其他方法吗?..

【问题讨论】:

    标签: java javascript jquery ajax jsp


    【解决方案1】:

    检查用户是否登录可能应该由您的 JSP 代码处理。

    这样,您可以在页面呈现之前发送重定向标头,而不必在重定向用户之前等待返回 ajax 响应。使用 ajax 意味着他们会在您重定向之前看到他们无权访问的页面。

    【讨论】:

      【解决方案2】:

      有很多方法可以处理 ajax 请求。最简单的方法(不一定是最好的)是创建一个 servlet 来处理您的 ajax 请求。下面的 servlet 示例将返回 json 字符串 { status: 'not logged in'}:

      package mycompany;
      
      public CheckLoginServlet extends HttpServlet {
        protected doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
          res.setContentType("application/json");
      
          HttpSession session = req.getSession();
          // do your stuff to check if user logged in here ..
      
          PrintWriter writer = res.getWriter();
          writer.append("{ status: 'not logged in' }");
        }
      }
      

      在您的 web.xml 部署描述符文件中声明并映射此 servlet:

      <web-app>
        <servlet>
          <servlet-class>mycompany.CheckLoginServlet</servlet-class>
          <servlet-name>CheckLoginServlet</servlet-name>
        </servlet>
      
        <servlet-mapping>
          <servlet-name>CheckLoginServlet</servlet-name>
          <url-pattern>/checklogin</url-pattern>
        </servlet-mapping>
      </web-app>
      

      servlet 现在映射到http://myhost/myappname/checklogin。然后,您可以通过 jquery 向该 servlet 发送 ajax post 请求:

      $.ajax('checklogin', {
        type: 'POST'
      }).done(function(res) {
        console.log(res.status); // will give you 'not logged in'
      });
      

      这种方法当然是一种陈旧过时的方法,但它有助于您了解 servlet 基础知识。如果您正在构建真实的企业应用程序,请考虑使用 Web 框架,例如 SpringJSF

      【讨论】:

        【解决方案3】:

        您可以在响应中以 JSON 格式发送用户状态和登录 URL。让我们为您的响应创建一个模型。

            public class Result {
        
             private boolean status;
             private String url;
        
             Result() {
             }
        
             Result(boolean status, String url) {
               this.status = status;
               this.url = url;
             }
        
             // getters and setters
        
            }
        

        现在,在您检查用户状态并构建登录 url 的操作中,初始化您的模型。

        Result res = new Result(status, url);
        

        现在我们需要将此模型作为 json 响应发送。有很多方法可以做到这一点,但我将使用 Google GSON 将模型序列化为 json 字符串。

        private String result;
        
        public void getResult() {
         return this.result;
        }
        
        public void setResult(Stringresult) {
        this.result = result;
        }
        
        Gson gson = new Gson();
        result= gson.toJson(res);
        ==> json is {"status": true,"url":"www.example.com"}
        

        最后一部分是检查客户端的响应并采取适当的措施。

        $.ajax({
            // ...
            success: function(response) {
                var responseJson = JSON.parse (response.responseText);
                if (!responseJson.status) {
                   window.location.href = responseJson.url;
                }
            }
        });
        

        参考:https://sites.google.com/site/gson/gson-user-guide

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-08
          • 2012-07-25
          • 1970-01-01
          • 2022-06-11
          • 1970-01-01
          • 1970-01-01
          • 2020-01-26
          • 1970-01-01
          相关资源
          最近更新 更多