【问题标题】:Using ajax to call a servlet使用ajax调用servlet
【发布时间】:2010-07-13 11:35:37
【问题描述】:

据我了解并使用它,AJAX 用于从客户端向服务器发出请求,然后用新内容更新客户端上的 HTML DIV。

但是,我想使用 AJAX 从客户端到 servlet 来验证 URL 的存在。如果结果不好,我可以在servlet中设置错误信息,返回到客户端页面显示。

但是有谁知道,如果结果是肯定的,我是否可以让我的 servlet 自动向用户显示另一个(下一个)页面?或者当收到肯定结果时,该请求是否应该由客户端上的 Javascript 触发。

谢谢

摩根先生。

【问题讨论】:

    标签: java ajax servlets


    【解决方案1】:

    由于您的 ajax 调用是在后台执行的,servlet 返回的结果会返回给 ajax 调用,然后它应该根据结果采取相应的行动。例如触发另一个页面的显示。 (这可能已经在 ajax 响应中,然后您可以在 div 或 iframe 中显示它或...)

    【讨论】:

      【解决方案2】:

      根据W3 specificationXMLHttpRequest 在服务器返回完全值得的 301/302 重定向并且满足新请求的 Same Origin Policy 时强制网络浏览器到新位置。但是,这在某些浏览器(例如某些 Google Chrome 版本)中会失败。

      为了获得最佳的跨浏览器结果,同样当重定向的 URL 不符合 Same Origin Policy 规则时,您希望改为在 JavaScript 端更改位置。您最终可以让您的 servlet 发送状态和所需的新 URL。例如

      Map<String, Object> map = new HashMap<String, Object>();
      map.put("redirect", true);
      map.put("location", "http://stackoverflow.com");
      response.setContentType("application/json");
      response.setCharacterEncoding("UTF-8");
      resposne.getWriter().write(new Gson().toJson(map));
      

      (顺便说一下GsonGoogle Gson,它可以轻松地将Java 对象转换为JSON)

      然后在 JS 中的 Ajax 成功回调处理程序中:

      if (response.redirect) {
          window.location = response.location;
      }
      

      【讨论】:

      • 刚刚在 Chrome、IE、Opera、Safari 和 Firefox 中试用过该工具,一切似乎都很好。但还有很多工作要做,所以我会牢记这一点。
      • 我不会依赖它,你可能也依赖于浏览器版本。只需在 JS 中进行重定向,而不是使用 window.location
      【解决方案3】:

      在您的成功回调中(在客户端),将 self.location.href 设置为新 URL。

      【讨论】:

      • 谢谢。它工作得很好。我通过 servlet 进行了尝试,它在调用页面上显示了被调用页面。但 self.location.href 工作正常。
      【解决方案4】:

      HTML 是一种“拉”技术:浏览器中不会显示浏览器之前未向服务器请求过的内容。

      因此,您没有机会“使 servlet 自动显示不同的页面”。您必须让您的浏览器(通过 JavaScript)请求另一个页面。

      【讨论】:

        猜你喜欢
        • 2016-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-26
        • 2013-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多