【问题标题】:Calling Servlet from JavaScript从 JavaScript 调用 Servlet
【发布时间】:2014-11-03 11:26:51
【问题描述】:

我打算在 JavaScript 中调用一个函数,然后在单击 <input type="image"> 后调用一个 Servlet。

JSP:

<head>
    <script type="text/javascript">
        function callServlet() {
            document.location.href="test-servlet.jsp";
        }
    </script>
</head>

<body>
    <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
    ...
    <input type="image" name="submit"
        src="https://www.paypalobjects.com/webstatic/en_US/btn/btn_buynow_pp_142x27.png"
        onclick="callServlet()" alt="PayPal - The safer, easier way to pay online!">
    </form>
</body>

Servlet (test-servlet.jsp):

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");

    PrintWriter out = response.getWriter();

    out.println("<h1>TestServlet called successfully!</h1>");
}

上下文根: http://localhost:8080/mysite/test-servlet.jsp

但是,当我单击图像按钮时没有任何反应。我是 JavaScript 新手。

【问题讨论】:

  • 您可以使用 jquery 而不是使用 javascript。是否有任何特定要求限制您仅使用 javascript?
  • @Rockstar jQuery 如何帮助解决这个问题:)? meta.stackexchange.com/questions/45176/…
  • 你的意图是什么?表单正在 PayPal 上提交,您正在尝试在单击提交时修改位置(竞争条件)。更改位置也会生成 GET 请求,但您的 servlet 正在处理 POST ......所以您提供的代码存在多个问题。
  • 那么为什么不@PavelHoral?我认为 OP 想在点击时进行 servlet 调用。
  • 很抱歉,如果我采取了错误的方式。可能是我对 OP 的意图理解不佳。

标签: java javascript jsp servlets


【解决方案1】:

试试这个代码

<a href="#" onclick="callServlet()"><img
    src="https://www.paypalobjects.com/webstatic/en_US/btn/btn_buynow_pp_142x27.png"
    alt="PayPal - The safer, easier way to pay online!"></a>

编辑:

最后我们发现 servlet 应该不带扩展名进行映射,并使用doGet 方法从 javascript 获取请求。

【讨论】:

  • 我猜他正在尝试访问 url test-servlet 而不是 action 属性中的那个
  • @SanKrish 他想要一个图片按钮去一个jsp页面
  • 但他的标题暗示 Calling Servlet from JavaScript :(
  • @RomanC 下一行 我是 JavaScript 新手。 甚至它也不会接受发布请求,因为他试图在帖子中传递它
  • 你应该映射一个没有扩展名的servlet并使用doGet方法。
【解决方案2】:

我可以在您的 jsp 中看到多个错误。

首先,

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">

并且也使用img标签和button,正如罗马所说的

action 中的 url 在你的表单被提交时被调用

所以尝试用 , 替换它

<form action="./test-servlet" method="post">

现在使用你的 JavaScript,

您不能使用window.location.href 发出POST 请求。检查pass post data with window.location.href

<script type="text/javascript">
    function callServlet() {
        document.forms[0].submit;
    }
</script>

【讨论】:

  • 您好,https://www.sandbox.paypal.com/cgi-bin/webscr 重定向到所需的 PayPal 沙盒站点。我想调用另一个 test-servlet 的原因是它设置了一个布尔值isPaypalButtonClicked。这可能吗?
  • 所以你希望它保持在同一页面上?如果是这样,请使用 ajax 为你完成工作
  • 遗憾的是,我们目前还不允许接触 AJAX。允许使用 jQuery 和 JS(但最少)。
  • 这样您就可以调用 servlet ,将值设置为请求并重定向回 jsp。
猜你喜欢
  • 1970-01-01
  • 2015-09-07
  • 2011-09-07
  • 1970-01-01
  • 2011-03-02
  • 2015-10-07
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
相关资源
最近更新 更多